C# 在.net中手动设置数据库的UpdateCommand或DeleteCommand
我不熟悉.net。我已经在SQL Server中创建了一个表,该表通过Windows上的dataGridView从中显示。我希望这些更改直接适用于Windows窗体上的数据表。为此,我使用dataAdapter和dataCommandBuilder变量 我面临以下问题: 我必须包含我不希望用户在表中看到的主键。 我希望使用一个过程来更新或添加表中的任何条目。 过程位于SQL Server中。 我的代码: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
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转发要在我的数据库中更新的联系人姓名。我不知道如何从我的数据表中获取特定的名称。