簡體   English   中英

C#SQL添加參數

[英]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 INSERTUPDATE語句的cmd.ExecuteNonQuerySELECT語句。
您必須使用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()用於INSERTUPDATE語句,並返回受影響的行數。 如果要返回一行的單個字段,則必須使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM