我想檢查表選擇不從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