存储过程调用,我面临的一个奇怪的情况

时间:2012-02-24 00:55:46

标签: c# database insert procedures

使用Visual Studio 2008,C#

在过去的两天里,我遇到了一个问题,所以我想我会问这里。 我在我的数据库中有一个名为StoredProcedure1的存储过程:

ALTER PROCEDURE dbo.StoredProcedure1
   @ID int,
   @Username varchar(10),
   @Pass varchar(10),
   @Status varchar(10)
AS
   INSERT INTO tPasswords(ID, fUsername, fPassword, fStatus)
   Values (@ID, @Username, @Pass, @Status)

   RETURN 

我只是在表格中添加一行。

当我从visual studio中的服务器资源管理器执行该过程时,一切运行顺利,当我看到数据进入我的数据库时,我看到我刚刚添加的新行。

问题是当我试图在程序中运行程序时。

因此,对于空表单中的测试,我创建了一个按钮并且:

using System.Data.Sql;
using System.Data.SqlClient;

private void button1_Click(object sender, EventArgs e)
{
    string a = "Andreas"; 
    string b = "Andreas2"; 
    string c = "Andreas3"; 
    int _id = 10;
     SqlConnection connection = new SqlConnection(
        Properties.Settings.Default.dPasswordsConnectionString);
    SqlCommand cmd = new SqlCommand(
        "StoredProcedure1", connection);
    connection.Open();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandTimeout = 600;
    cmd.Parameters.Add("@ID", _id);
    cmd.Parameters.Add("@Username", a);
    cmd.Parameters.Add("@Pass", b);
    cmd.Parameters.Add("@Status", c);

    int i = cmd.ExecuteNonQuery();

    connection.Close();
}

当我按下此按钮时,我没有任何错误或任何错误,当我按两次它会导致关于同一主键的错误,因此该过程正在运行。

但是当我进入我的数据库时,我没有看到插入的新数据。

实际上我的问题是,我无法从我的程序中写入我的数据库。

1 个答案:

答案 0 :(得分:1)

您正在尝试在存储过程中设置主键,我猜。

你应该让SQL为你设置它。

我猜@ID是您的主键...删除该代码,以及您将proc值插入行中的代码。

您应该确保将列定义设置为自动生成这些。