我想检查表选择不从Windows窗体应用程序工作
在变量“名”的存在我送现有表字符串有关的文件的数据,但“的returnValue”总是-1。 在testQuery面板它的工作原理,我复制相同的查询,它的工作原理,返回值是一行。 问题在哪里,我该如何解决这个问题?
我想检查表选择不从Windows窗体应用程序工作
在变量“名”的存在我送现有表字符串有关的文件的数据,但“的returnValue”总是-1。 在testQuery面板它的工作原理,我复制相同的查询,它的工作原理,返回值是一行。 问题在哪里,我该如何解决这个问题?
由于您只想检查记录是否存在,您不需要从查询中返回任何字段。你可以写这样的,用ExecuteScalar:
var command = new SqlCeCommand("select 1 as Result from Files where nameFile = @file",con);
command.Parameters.AddWithValue("@file", name);
var result=command.ExecuteScalar();
这将返回,而不是整个记录
只需确保name
变量不包含原始示例类似的任何不必要的空格只是一个单一的价值。
OP会还需要更改返回值的检查:) – Tim
更好的方法是这样的:
var command = new SqlCeCommand("select top 1 * from Files where nameFile = @file",con);
command.Parameters.AddWithValue("@file", name);
var returned = command.ExecuteScalar();
if (returned != null)
{
returned = true;
}
,这应该能正常运行。另外top 1
是为了表现,如果你只想检查文件是否存在于数据库中。
它看起来像名称后面有一个空格 - 换句话说,就是说name =“John”,但在查询中它将是'John'。这可能是因为它不工作。
此外,您应该使用参数化查询以避免SQL注入攻击。像这样的东西应该解决您的问题:
var command = new SqlCeCommand("Select * From Files
Where [email protected]",con);
command.Parameters.AddWithValue("@Name", name);
请始终使用parameterized SQL
。这种字符串连接对于SQL Injection
攻击是开放的。
var command = new SqlCeCommand("Select * From Files Where nameFile= @nameFile",con);
command.Parameters.AddWithValue("@nameFile", name);
int returnValue = command.ExecuteNonQuery();
您确定名称后面有空格+“? –
where nameFile ='”+ name +“'”....修复您的空间.. – Olrac
您在名称后有一个额外的空间。 'nameFile ='“+ name +”''应该是'nameFile ='“+ name +”''。但是,您应该使用参数化查询来避免SQL注入攻击。 – Tim