无法在asp.net C#中将数据插入数据库

时间:2012-10-05 02:59:35

标签: c# asp.net sql-insert

我是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”开头。

5 个答案:

答案 0 :(得分:1)

您必须在括号

时转义Mobile Number
Insert into TransDetails(AccountNumber,Amount,Provider,[Mobile Number],...

并删除parameter

中的空格
...,@MobileNumber,@TransNum,@TransDate,@Status

并更改命令参数

中的参数名称
cmd.Parameters.AddWithValue("@MobileNumber", lblNumber.Text);

但是看到您的stored procedure,列Mobile Number之间没有空格。在QueryA的查询中是否出现拼写错误?如果是,则删除其上的空格(也在参数名称上)

Insert into TransDetails(AccountNumber,Amount,Provider,MobileNumber,...

将您的CommandType.Text更改为CommandType.StoredProcedure并删除此行

cmd.CommandText = QueryA;

答案 1 :(得分:1)

我可能读错了,但看起来你的存储过程根本就没用过。尝试注释掉“cmd.CommandText = QueryA;”并替换“cmd.CommandText =”InsertRecord1“;”并将CommandType更改为StoredProcedure。

顺便说一下,QueryA最后错过了一个paren。但是,整个过程是不必要的,因为你有一个存储过程做同样的事情,并且几乎总是更喜欢使用存储过程而不是嵌入式DML。

答案 2 :(得分:0)

您正在使用SqlCommand构造函数的错误重载。根据MSDN:

  

new SqlCommand(string,SqlConnection)使用查询文本和SqlConnection初始化SqlCommand类的新实例。

您需要做的是将sql命令的CommandType设置为CommandType.StoredProcedure而不使用QueryA,或者使用QueryA初始化sql命令而不是make使用您的存储过程。

答案 3 :(得分:0)

正如您所看到的,在SQL语句的开头有 @

此外,您还没有真正使用商店程序。

答案 4 :(得分:0)

你可以试试这个:

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访问数据。

下载 您可以在此处下载http://download.microsoft.com/download/VisualStudioNET/daabref/RTM/NT5/EN-US/DataAccessApplicationBlock.msi

<强>简介 http://www.4guysfromrolla.com/articles/062503-1.aspx