我的代码如下:
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的条目'
答案 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变量周围添加了',现在可以使用