Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将数据插入asp.net C中的数据库#_C#_Asp.net_Sql Insert - Fatal编程技术网

C# 无法将数据插入asp.net 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 = "@

我是C#编程新手,如果有人能帮助我,我将不胜感激。我知道有类似的问题,但我仍然找不到解决问题的办法。我正在开发一个模拟系统,当用户购买产品时,系统将存储所有交易细节。问题是,我无法将数据插入数据库。代码如下:

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();
            }
        }