我会建议先检查,看看是否在关键的表存在,如不及时补充,并得到新的主键,如果存在,那么做无非通知用户等。
在这里我有一个医院科室的表格(只有两列来保持简单)。
这里我使用一个类来保持数据操作与表单分离。
using System;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public class Operations
{
/// <summary>
/// Replace with your SQL Server name
/// </summary>
private string Server = "KARENS-PC";
/// <summary>
/// Database in which data resides, see SQL_Script.sql
/// </summary>
private string Catalog = "ForumExamples";
/// <summary>
/// Connection string for connecting to the database
/// </summary>
private string ConnectionString = "";
/// <summary>
/// Setup the connection string
/// </summary>
public Operations()
{
ConnectionString = $"Data Source={Server};Initial Catalog={Catalog};Integrated Security=True";
}
public bool InsertDepartment(string pDepartment, ref int pIdentifier)
{
using (SqlConnection cn = new SqlConnection { ConnectionString = ConnectionString })
{
using (SqlCommand cmd = new SqlCommand { Connection = cn })
{
cmd.CommandText = "SELECT Name FROM Departments WHERE Name = @Name";
cmd.Parameters.AddWithValue("@Name", pDepartment);
cn.Open();
if (cmd.ExecuteScalar() == null)
{
cmd.CommandText = @"
INSERT INTO dbo.Departments (Name)
VALUES (@Name); SELECT CAST(scope_identity() AS int);";
pIdentifier = Convert.ToInt32(cmd.ExecuteScalar());
return true;
}
else
{
return false;
}
}
}
}
}
}
表格代码,一个按钮,一个文本框
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(txtDepartmentName.Text))
{
int id = 0;
Operations ops = new Operations();
if (ops.InsertDepartment(txtDepartmentName.Text, ref id))
{
MessageBox.Show($"Id for '{txtDepartmentName.Text}' is {id}");
}
else
{
MessageBox.Show($"Department '{txtDepartmentName.Text}' is already in the database table");
}
}
else
{
MessageBox.Show("Please enter a department name");
}
}
}
上面的代码的某些部分是用于SQL - 服务器例如MS-Access或其他数据库可以通过一些修改来获取新的主键。
听起来像objConnect.UpdateDatabase试图插入而不是更新?但我们无法知道该方法在做什么。 – Crowcoder
这里是类https://jsfiddle.net/o1cd14xv/ – RTX
尝试运行简单的更新命令而不是使用数据适配器,您正在向数据集添加行并尝试更新它,但是在更新后您不刷新数据集。 – Krishna