C# SQL查询未执行
我试图执行一个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()
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有很多问题,我不建议使用它