SQL查询未执行

时间:2015-10-25 21:48:17

标签: c# sql asp.net sql-server

我正在尝试执行一个将值插入表中的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();'并爆发

我在这里做错了什么?

4 个答案:

答案 0 :(得分:1)

VALUES之前添加空格,因为SQL中存在语法错误:

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

答案 1 :(得分:1)

SqlParameter类有许多构造函数,但是当参数值是一个零值的整数时,两个构造函数都会引起问题。 (在您的示例中,status变量的值为零)

第一个构造函数接受一个字符串和一个对象,第二个构造函数接受一个字符串和一个SqlDbType。此方案会导致以下问题。

如果调用SqlParameter构造函数并传递值为零的整数,则调用的构造函数将您的参数视为值为零的SqlDbType。最后你得到一个带NULL值的参数。

如果您的数据库中的列不接受NULL值,那么您需要花时间去理解代码失败的原因。

添加参数时,我已经开始使用这种语法

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

顺便说一下,MSDN explain it as well

答案 2 :(得分:0)

看看这个 SQL Insert Query Using C#

有人说你需要在执行非查询之前打开连接。 同时发现您的cmd.Parameters.Add()功能已弃用,请改用cmd.Parameters.AddWithValue()

完成doco: https://msdn.microsoft.com/en-us/library/9dd8zze1(v=vs.110).aspx

答案 3 :(得分:0)

使用

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(),因为您已经将它放在使用()中,表示如果有开放连接则使用它,如果没有,则打开连接。