1

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

4

5 回答 5

1

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

顺便说一句,QueryA 最后缺少一个括号。但是,整个事情是不必要的,因为您有一个执行相同操作的存储过程,并且几乎总是更可取的是使用存储过程而不是嵌入式 DML。

于 2012-10-05T03:10:06.117 回答
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.TextCommandType.StoredProcedure并删除此行,

cmd.CommandText = QueryA;
于 2012-10-05T03:01:38.533 回答
0

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

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

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

于 2012-10-05T03:06:53.920 回答
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

于 2012-10-06T03:09:44.787 回答
0

如您所见,SQL 语句的开头有@ 。

此外,您并没有真正使用存储过程。

于 2012-10-05T04:24:58.190 回答