将varchar-Value'..'转换为int-Datatype时出错

时间:2018-11-06 11:50:58

标签: c# sql sql-server

我的代码如下:

void countVR(int kk){
        string selectString = "SELECT COUNT(*) FROM cllohn" + (Jahr % 100).ToString("00") + " WHERE lzVSTR="+kk;
        if(filtsel == selstr){
            using (IDbConnection con = DatabaseFactory.Connect("CL" + (Jahr % 100).ToString("00"), true)) {
                //con.Open();
                using (IDbCommand cmd = con.CreateCommand()) {
                    cmd.CommandText = selectString;
                    using (IDataReader reader = cmd.ExecuteReader()) {
                        while(reader.Read()){
                            zeilenCount = reader.GetAsInteger(0);
                            //System.Diagnostics.Debug.WriteLine("Zeilen in " + kk + ": " +zeilenCount);
                        }
                    }
                }
            }
        }

这是我得到的错误:

  

System.Transactions严重:0:http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled异常   AusnahmeCONTELDA2.exeSystem.Data.Odbc.OdbcException,   System.Data,版本= 4.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089ERROR [22018]   [Microsoft] [ODBC SQL Server驱动程序] [SQL Server] Fehler beim   书房中的Konvertieren des varchar-Werts'..'   达滕蒂普。

如果我在SELECT语句中添加“ AND lzBEST ='VR'”,它将再次起作用,但是我想对lzVSTR = kk(无论可能是多少)的所有条目进行计数,而不仅是lzBEST ='VR的条目'

2 个答案:

答案 0 :(得分:4)

也许将db上的数据类型更改为某种整数?为什么这与您输入的内容不同?无论如何,下面的方法应该可行。您应始终确保在SqlCommand中利用parameters property来避免SQL injection

void countVR(int kk)
{
    string selectString = "SELECT COUNT(*) FROM cllohn" + (Jahr % 100).ToString("00") + " WHERE lzVSTR=@KK";
    if (filtsel == selstr)
    {
        using (IDbConnection con = DatabaseFactory.Connect("CL" + (Jahr % 100).ToString("00"), true))
        {
            //con.Open();
            using (IDbCommand cmd = con.CreateCommand())
            {
                cmd.CommandText = selectString;
                SqlParameter sqlParameter = new SqlParameter()
                {
                    Value = kk,
                    ParameterName = "@KK"
                };
                cmd.Parameters.Add(sqlParameter);
                using (IDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        zeilenCount = reader.GetInt32(0);
                        //System.Diagnostics.Debug.WriteLine("Zeilen in " + kk + ": " +zeilenCount);
                    }
                }
            }
        }
    }
}

答案 1 :(得分:-5)

数据库中的数据类型为varchar,所以我在kk变量周围添加了',现在可以使用

相关问题