Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# 在.net中手动设置数据库的UpdateCommand或DeleteCommand_C#_.net_Sql Server_Windows_Datagridview - Fatal编程技术网

C# 在.net中手动设置数据库的UpdateCommand或DeleteCommand

C# 在.net中手动设置数据库的UpdateCommand或DeleteCommand,c#,.net,sql-server,windows,datagridview,C#,.net,Sql Server,Windows,Datagridview,我不熟悉.net。我已经在SQL Server中创建了一个表,该表通过Windows上的dataGridView从中显示。我希望这些更改直接适用于Windows窗体上的数据表。为此,我使用dataAdapter和dataCommandBuilder变量 我面临以下问题: 我必须包含我不希望用户在表中看到的主键。 我希望使用一个过程来更新或添加表中的任何条目。 过程位于SQL Server中。 我的代码: SqlDataAdapter sda; SqlCommandBuilder scb; Dat

我不熟悉.net。我已经在SQL Server中创建了一个表,该表通过Windows上的dataGridView从中显示。我希望这些更改直接适用于Windows窗体上的数据表。为此,我使用dataAdapter和dataCommandBuilder变量

我面临以下问题:

我必须包含我不希望用户在表中看到的主键。 我希望使用一个过程来更新或添加表中的任何条目。 过程位于SQL Server中。 我的代码:

SqlDataAdapter sda;
SqlCommandBuilder scb;
DataTable dt;

private void Refresh()
{
    string con = null;
    SqlConnection connect;
    con = @"Server =Hassan; Database =FBT; Integrated Security =SSPI;";
    connect = new SqlConnection(con);

    sda = new SqlDataAdapter(@"SELECT * FROM Contact_Person", con);
    dt = new DataTable();
    sda.Fill(dt);

    dataGridView1.DataSource = dt;
}

private void button9_Click(object sender, EventArgs e)
{
    scb = new SqlCommandBuilder(sda);
    sda.Update(dt);
}

private void button8_Click(object sender, EventArgs e)
{
    Refresh();
}
我想如果有任何方法我可以手动设置更新功能,这样我就可以将它引导到我所做的过程中,将解决我的问题


[下面附上的图片是我的代码,函数前面写的数字表示它们的调用顺序]

DataGridView有几个功能可以绑定或取消绑定所需的列,但由于您需要主键进行更新,我建议使用可见性,请参见下文:

从数据库获取查询并使用其数据源aka dataGridView1.datasource=dt将其绑定到DataGridView之后;将主键字段的可见性设置为false,如下所示:

dataGridView1.Columns["PrimaryKey"].Visibility = false;
因为我不知道您的存储过程,所以我不能说得这么具体,但这就是您更新字段的方式

using (SqlConnection conn = new SqlConnection("Server =Hassan; Database =FBT; Integrated Security =SSPI;"))
using (SqlCommand cmd = new SqlCommand("StoredProcedure", conn))
{    
    SqlDataAdapter adapt = new SqlDataAdapter(cmd);
    adapt.SelectCommand.CommandType = CommandType.StoredProcedure;
    //you should know whats the type of your primary key i assumed its int
    adapt.SelectCommand.Parameters.Add(new SqlParameter("@PrimaryKey", SqlDbType.Int)); 
    adapt.SelectCommand.Parameters["@PrimaryKey"].Value = PrimaryKey;

    //lets assume you are updating a Name which is string then
    adapt.SelectCommand.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar, 50));
    adapt.SelectCommand.Parameters["@Name"].Value = Name;

conn.Open();
cmd.ExecuteNonQuery();

}
更新

您的SQL存储过程如下所示:

CREATE Procedure ProcedureName
(
   @PrimaryKey Int,
   @Name varchar(50)
)
AS BEGIN
  UPDATE TABLENAME
  SET Name = @Name
  Where PrimaryKey = @PrimaryKey
END

您的存储过程是什么?包含在问题中SQL DataAdapter有四个SQL命令Select、Insert、Delete、Update,每个命令都有一个用于创建字符串查询的命令文本属性。非常感谢您的帮助。但我的问题是,我使用的过程有多个参数。实际上,我正在更新属于特定供应商的任何联系人的详细信息。主要的问题是,从.net转发要在我的数据库中更新的联系人姓名。我不知道如何从我的数据表中获取特定的名称。