帽子引发了一个奇怪的问题

索卡斯基

知名会员
已加入
2014年3月3日
留言内容
59
编程经验
Beginner
这是证明问题的屏幕截图:
_sqlhata.jpg

引发此问题:"指定的演员表无效。"

这是我方法的代码:
private Int32 MSSQLCheckQty() 
        {
            Int32 getBalanceQty = 0;
            string strConn =
                "Data Source=19xxxxx;Initial Catalog=NewTBT;Persist Security Info=True;User ID=sxxx;Password=xxxx;";
            string sql =
                "SELECT SUM(nQty) as QTY FROM tbRecords WHERE sMPS = '" + txtMPS.Text.Trim() + "' AND sTerminalCode = '" + splitchar + "'";
            using (SqlConnection conn = new SqlConnection(strConn)) 
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                try 
                {
                    conn.Open();
                    using (SqlDataReader reader = cmd.ExecuteReader()) 
                    {
                        //reader.Read();
                        while (reader.Read()) 
                        {
                            if (!reader.IsDBNull(reader.GetOrdinal("QTY"))) 
                            {
                                getBalanceQty = reader.GetInt32(reader.GetOrdinal("QTY"));
                            }
                            else 
                            {
                                getBalanceQty = 0;
                            }
                        }
                    }
                } 
                catch (Exception ex) 
                {
                    MessageBox.Show(ex.Message);
                }
            }
 

狂暴风暴

知名会员
已加入
2014年8月6日
留言内容
85
地点
南非鲁德普特
编程经验
10+
您的屏幕截图无法证明任何内容。该问题与“无效的列名”无关。当我在现有表中添加一列,然后使用该列编写查询时,我经常在SSMS中看到它。到目前为止,唯一的解决方案是再次关闭并启动SSMS或对表进行一些(乏味的)刷新。

检查stacktrace(例如Stacktrace);它可能会告诉您代码的哪一行失败。我怀疑您显示的块的第21行。 SQL数值数据类型不是int32。
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
问题最有可能在这里:
getBalanceQty = reader.GetInt32(reader.GetOrdinal("QTY"));
如果您希望所有nQTY值的总和为Int32,那么显然您希望每个nQTY值均为整数,因此您应该在数据库中使用`int`数据类型。如果您使用“数字”数据类型,那么我认为您会发现在C#代码中返回的是Double,因此您需要在数据读取器上调用GetDouble。
 

索卡斯基

知名会员
已加入
2014年3月3日
留言内容
59
编程经验
Beginner
实际上,当我使用Insert方法时没有问题,因为nQty始终包含一个日期,该日期处于设置为Decimal的float限制内。就像jmcilhinney所说的那样。现在,我通过添加类型转换方法解决了它。
 
最佳 底部