C# 无法将数据插入asp.net C中的数据库#
我是C#编程新手,如果有人能帮助我,我将不胜感激。我知道有类似的问题,但我仍然找不到解决问题的办法。我正在开发一个模拟系统,当用户购买产品时,系统将存储所有交易细节。问题是,我无法将数据插入数据库。代码如下:C# 无法将数据插入asp.net C中的数据库#,c#,asp.net,sql-insert,C#,Asp.net,Sql Insert,我是C#编程新手,如果有人能帮助我,我将不胜感激。我知道有类似的问题,但我仍然找不到解决问题的办法。我正在开发一个模拟系统,当用户购买产品时,系统将存储所有交易细节。问题是,我无法将数据插入数据库。代码如下: using (SqlConnection conn = new SqlConnection (ConfigurationManager.ConnectionStrings["database"].ConnectionString)) { string QueryA = "@
using (SqlConnection conn = new SqlConnection
(ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
string QueryA = "@Insert into TransDetails(AccountNumber,Amount,Provider"
+ ",Mobile Number,TransNum,TransDate, Status) "
+ " Values (@AccountNumber,@Amount,@Provider,@Mobile Number,"
+ "@TransNum,@TransDate,@Status";
using (SqlCommand cmd = new SqlCommand("InsertRecord", conn))
{
conn.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = QueryA;
cmd.Parameters.AddWithValue("@AccountNumber", acc.Text);
cmd.Parameters.AddWithValue("@Amount", lblAmount.Text);
cmd.Parameters.AddWithValue("@Provider", lblProvider.Text);
cmd.Parameters.AddWithValue("@Mobile Number", lblNumber.Text);
cmd.Parameters.AddWithValue("@TransNum", lblTrans.Text);
cmd.Parameters.AddWithValue("@TransDate", lblDate.Text);
cmd.Parameters.AddWithValue("@Status", status.Text);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch
{
lblMessage.Text = "Error";
}
finally
{
conn.Close();
}
}
}
储存程序如下:
ALTER PROCEDURE InsertRecord1
@AccountNumber int,
@Amount nchar(10),
@Provider nchar(10),
@MobileNumber int,
@TransNum nchar(10),
@TransDate date,
@Status nchar(10)
AS
Insert into TransDetails(AccountNumber,Amount,Provider,MobileNumber,TransNum,TransDate,Status)
Values (@AccountNumber,@Amount,@Provider,@MobileNumber,@TransNum,@TransDate,@Status)
return
非常感谢您的帮助。
P/S:我不知道为什么存储过程的开头以“alter”开头。
您必须在括号中转义
Mobile Number
Insert into TransDetails(AccountNumber,Amount,Provider,[Mobile Number],...
并删除参数中的空格
...,@MobileNumber,@TransNum,@TransDate,@Status
并更改命令参数中的paramname
cmd.Parameters.AddWithValue("@MobileNumber", lblNumber.Text);
但是看到您的存储过程
,列手机号
之间没有空格。您对QueryA
的查询中是否存在打字错误?如果是,则删除其上的空格(以及参数名称上的空格)
或
将您的CommandType.Text
更改为CommandType.storedProcess
并删除此行
cmd.CommandText = QueryA;
您使用了错误的SqlCommand
构造函数重载。根据MSDN:
new SqlCommand(string,SqlConnection)使用查询文本和SqlConnection初始化SqlCommand类的新实例
您需要做的是将sql命令的CommandType
设置为CommandType.StoredProcess
而不使用QueryA
,或者使用QueryA
初始化sql命令而不使用存储过程。我可能读错了,但看起来您的存储过程根本没有被使用。尝试注释掉“cmd.CommandText=QueryA;”并替换为“cmd.CommandText=“InsertRecord1”;”并将CommandType更改为StoredProcess
顺便说一句,QueryA最后缺了一个paren。但是,这一切都是不必要的,因为您有一个执行相同操作的存储过程,而且几乎总是最好使用存储过程而不是嵌入式DML。正如您可以看到的,SQL语句开头有一个@
此外,您还没有真正使用存储过程。您可以尝试以下方法:
using (SqlConnection conn = new SqlConnection (ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("InsertRecord1", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AccountNumber", acc.Text);
cmd.Parameters.AddWithValue("@Amount", lblAmount.Text);
cmd.Parameters.AddWithValue("@Provider", lblProvider.Text);
cmd.Parameters.AddWithValue("@Mobile Number", lblNumber.Text);
cmd.Parameters.AddWithValue("@TransNum", lblTrans.Text);
cmd.Parameters.AddWithValue("@TransDate", lblDate.Text);
cmd.Parameters.AddWithValue("@Status", status.Text);
try
{
cmd.ExecuteNonQuery();
}
catch
{
lblMessage.Text = "Error";
}
finally
{
conn.Close();
}
}
虽然我不使用SQL命令、适配器等。从SQL数据库访问数据。我更喜欢Microsoft Data Access ApplicationBlocks,它是Microsoft提供的易于使用的库,用于从SQL Server访问数据
下载
你可以在这里下载
导言
否,他将commandText更改回QueryA
,cmd.commandText=QueryA代码>如果他要更改它,它将抛出一个异常,说明找不到该过程。我知道了!!!!!有两件事我搞混了。。。第一:我错过了字符串定义末尾的“)”。string QueryA=“Insert into TransDetails(AccountNumber、Amount、Provider”…@TransDate、@Status);第二:我在这里使用存储过程,使用(SqlCommand cmd=new SqlCommand(“InsertRecord”,conn)),但在这里使用SqlCommand,cmd.CommandText=QueryA;因此,我只是用QueryA替换上面的“InsertRecord”,并添加“)“在绳子上。。谢谢大家…如果不是你们,我不会看到错误。谢谢你清理它。为什么你要创建一个存储过程,然后将命令文本设置为insert语句。要调用存储的proc还是insert语句?另外,不要麻烦将SqlCommand放在using块中。但是,谢谢你把你的连接放在一个。这里的帖子太多了,没有任何用处,让我晚上很难入睡。请不要使用你的例外。当您说您不能插入时,您是否看到LBL消息说“错误”,或者代码运行正常,但在数据库中看不到数据?可以运行代码并显示错误消息,但数据库中没有插入数据..对于存储过程,我只是尝试了一下,因为我只使用了命令,但仍然无法将数据插入数据库我删除了它,但仍然没有任何结果如果我没有包含存储过程,并且只使用了sqlcommand,输出仍然是一样的。你能告诉我编写sqlcommand的正确方法吗,如果我做得不对的话。谢谢
using (SqlConnection conn = new SqlConnection (ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("InsertRecord1", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AccountNumber", acc.Text);
cmd.Parameters.AddWithValue("@Amount", lblAmount.Text);
cmd.Parameters.AddWithValue("@Provider", lblProvider.Text);
cmd.Parameters.AddWithValue("@Mobile Number", lblNumber.Text);
cmd.Parameters.AddWithValue("@TransNum", lblTrans.Text);
cmd.Parameters.AddWithValue("@TransDate", lblDate.Text);
cmd.Parameters.AddWithValue("@Status", status.Text);
try
{
cmd.ExecuteNonQuery();
}
catch
{
lblMessage.Text = "Error";
}
finally
{
conn.Close();
}
}