簡體   English   中英

SQL查詢未執行

[英]SQL query not getting executed

我正在嘗試執行將值插入表中的SQL命令。 代碼如下:

    public static bool Add(string username, string friend_username, int status, string msg, string key, string reject_key)
{
    using (SqlConnection con = new SqlConnection(Config.ConnectionString))
    {
        con.Open();
        StringBuilder query = new StringBuilder();
        query.Append("Insert into friends(username,friend_username,status,msg,date_added,val_key,reject_key)values");
        query.Append("(@username,@friend_username,@status,@msg,@date_added,@key,@reject_key)");

        using (SqlCommand cmd = new SqlCommand(query.ToString(), con))
        {
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add(new SqlParameter("@username", username));
            cmd.Parameters.Add(new SqlParameter("@friend_username", friend_username));
            cmd.Parameters.Add(new SqlParameter("@status", status));
            cmd.Parameters.Add(new SqlParameter("@msg", msg));
            cmd.Parameters.Add(new SqlParameter("@date_added", DateTime.Now));
            cmd.Parameters.Add(new SqlParameter("@key", key));
            cmd.Parameters.Add(new SqlParameter("@reject_key", reject_key));
            cmd.ExecuteNonQuery();
        }
    }
    return true;
}

在這里調用“添加”功能:

    private void Process_Approve_Action(int mtype, long groupid, long content_id, string usr)
{
    // approval status = 0(
    int status = 0;
    switch (mtype)
    {
        case 4: // friend invitation
            string request_username = usr;
            string friend_username = Page.User.Identity.Name;

            //FriendsBLL.Update_Status(request_username, friend_username, 0);
            //// also add invited user as their own friend
            FriendsBLL.Add(friend_username, request_username, status, "", "", "");
            Config.ShowMessageV2(msg, Resources.vsk.message_inbox_06, "Success!", 1); //Friend invitation accepted.
            break;

    }

我嘗試調試Add函數,調試器不會通過'cmd.ExecuteNonQuery();' 並爆發

我在這里做錯了什么?

由於您在SQL中存在語法錯誤,因此請在VALUES之前添加空格:

query.Append("Insert into friends(username,friend_username,status,msg,date_added,val_key,reject_key) values");

SqlParameter類具有許多構造函數,但是眾所周知兩個構造函數會在參數值是具有零值的整數時引起問題。 (在您的示例中, status變量的值為零)

第一個構造函數接受一個字符串和一個對象,第二個構造函數接受一個字符串和一個SqlDbType。 這種情況導致以下問題。

如果調用SqlParameter構造函數並傳遞一個值為零的整數,則調用的構造函數就是將您的參數視為值為零的SqlDbType的構造函數。 最后,您得到的參數值為NULL。

如果數據庫的列不接受NULL值,那么您將花費大量的時間來弄清楚代碼為什么失敗。

添加參數時,我已經開始總是使用這種語法

 cmd.Parameters.Add("@status", SqlDbType.Int).Value = status;

順便說一下, MSDN也對此進行解釋

看看使用C#的SQL插入查詢

有人說您需要在執行非查詢之前先打開連接。 還發現您的cmd.Parameters.Add()函數已被棄用,請改用cmd.Parameters.AddWithValue()

完整的文檔: https ://msdn.microsoft.com/zh-cn/library/9dd8zze1( v= vs.110).aspx

采用

cmd.Parameters.Add("@PARAMETERNAME", SqlDbType.VarChar).Value = variableName;

另一個可能的問題是放置連接字符串的位置

using(SqlConnection con = new SqlConnection("Your Connection String Here");


 NOTE: if you have this kind of code you should no longer be doing the

con.Open(),因為您已經將其放置在using()中 ,該信息指示如果有打開的連接,則使用它;否則,請打開一個連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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