C# SQL查询未执行

C# SQL查询未执行,c#,sql,asp.net,sql-server,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()

我试图执行一个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;
}
在此处调用“Add”函数:

    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中有语法错误:

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

有人说您需要在执行非查询之前打开连接。 还发现您的
cmd.Parameters.Add()
函数已被弃用,请改用
cmd.Parameters.AddWithValue()

完整文档:
SqlParameter类有许多构造函数,但众所周知,当参数值是一个带零值的整数时,有两个构造函数会导致问题。(在您的示例中,
status
变量的值为零值)

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

如果调用Sql参数构造函数并传递一个值为零的整数,调用的构造函数就是考虑参数为零的SqLDbType的构造函数。最终得到的参数值为空

如果数据库中的列不接受空值,那么您就要费尽心思去理解代码失败的原因

我开始在添加参数时总是使用这种语法

 cmd.Parameters.Add("@status", SqlDbType.Int).Value = status;
顺便说一下,

使用

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()中,这表示如果存在打开的连接,您就使用它,如果没有,就打开一个连接

你说突发事件是什么意思?你有没有收到任何异常和准确的错误消息?@Steve我没有收到任何错误消息。调试器不会转到下一行,也不会向表中添加任何内容。我会尝试将添加状态参数的行更改为ucmd.Parameters.add(“@status”,SqlDbType.Int)。Value=status@AhmedMujtaba非常重要。您的连接字符串是否包含
| DataDirectory |
或类似内容?您确定在调试/发布中连接到相同的服务器吗DB@lad2025这是我的连接字符串:我在执行其他SQL查询函数时没有问题。这个函数与其他函数的方式相同,但由于某些原因,它不起作用。我删除了值之前的空格,但它仍然不起作用work@AhmedMujtaba您可以更具体地说明“不工作”吗?查询未执行。即使我有所有带值的参数,也没有向表中添加任何get。@AhmedMujtaba,并且没有错误消息/警告/堆栈跟踪/调试信息?没有,我没有收到任何错误。奇怪的是,当我从另一个类调用同一个函数时,它可以正常工作。另外AddWithValue有很多问题,我不建议使用它