[英]C# SQL Add parameter
我試圖通過在C#中執行以下SQL查詢來返回一行:
SqlCommand cmd = new SqlCommand();
string selectquery = "SELECT TOP (1) [ZVNr] ZVNR_TABLE WHERE [ZVNr] = @zvnr order by [ZVNr] DESC";
cmd.Parameters.AddWithValue("@zvnr", "20170530-01");
cmd.CommandText = selectquery;
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection;
try
{
sqlConnection.Open();
int recordsAffected = cmd.ExecuteNonQuery();
if(recordsAffected != -1)
{
return 0;
}
else
{
return 1;
}
並且“ ZVNR_TABLE”看起來像這樣:
ZVNR | varchar (50)
20170530-01
結果始終為-> recordsAffected = -1
雖然當我在Microsoft SQL Server Management Studio中執行相同的SQL查詢時,它仍然有效。
因為您要從數據表中選擇數據而不插入或更新記錄,所以recordsAffected始終為-1
您在代碼中使用cmd.ExecuteNonQuery
INSERT
或UPDATE
語句的cmd.ExecuteNonQuery
的SELECT
語句。
您必須使用SQLDataReader (多於1行和(!)列)或Scalar(1行/ 1col =一個“項目”)。
用於SQLDataReader
MSDN示例 :
//SELECT col1, col2, ..., coln FROM tbl;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
ExecuteScalar
MSDN示例 :
//SELECT COUNT(*) FROM region; or any other single value SELECT statement
int count = (int)cmd.ExecuteScalar(); //cast the type as needed
如果您希望在更改數據庫中的項目后獲得受影響的計數,則可以使用cmd.ExecuteNonQuery
返回該計數:
ExecuteNonQuery
MSDN示例 :
//INSERT INTO tbl (...) VALUES (...) or any other non-query statement
int rowsAffected = (Int32)cmd.ExecuteNonQuery();
對於UPDATE,INSERT和DELETE語句,返回值是該命令影響的行數。
ExecuteNonQuery()
用於INSERT
或UPDATE
語句,並返回受影響的行數。 如果要返回一行的單個字段,則必須使用ExecuteScalar()
using (SqlConnection connection = new SqlConnection(connectionstring))
{
string query = "SELECT TOP (1) [ZVNr] ZVNR_TABLE WHERE [ZVNr] = @zvnr order by [ZVNr] DESC";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@zvnr", "20170530-01");
connection.Open();
object result = cmd.ExecuteScalar();
}
}
上面給出的答案是可以的,但是如果您只想查看它是否存在,可以代替計數
using (SqlConnection connection = new SqlConnection(connectionstring))
{
string query = "SELECT Count([ZVNr]) ZVNR_TABLE WHERE [ZVNr] = @zvnr order by [ZVNr] DESC";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@zvnr", "20170530-01");
try
{
connection.Open();
int result = (int)cmd.ExecuteScalar();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.