Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
不能';无法更新此表,SQL Server数据库C#应用程序_C#_Sql_Sql Server - Fatal编程技术网

不能';无法更新此表,SQL Server数据库C#应用程序

不能';无法更新此表,SQL Server数据库C#应用程序,c#,sql,sql-server,C#,Sql,Sql Server,我创建了3个表: 客户端:客户端ID、客户端名称、客户端状态、 员工:Emp\u ID、Emp\u名称、Emp\u角色 EmpJobs:Emp\u ID、Emp\u Name、Client\u ID、Client\u Name、花费的小时数、Job\u日期 我正在尝试根据客户和员工中的相关列,将数据(花费的小时数,工作日期)插入/更新到EmpJobs 这是我的密码 string constring = "Data Source=baker-pc;Initial Catalog=Bakodah

我创建了3个表:

  • 客户端
    :客户端ID、客户端名称、客户端状态、
  • 员工
    :Emp\u ID、Emp\u名称、Emp\u角色
  • EmpJobs
    :Emp\u ID、Emp\u Name、Client\u ID、Client\u Name、花费的小时数、Job\u日期
我正在尝试根据
客户
员工
中的相关列,将数据(
花费的小时数
工作日期
)插入/更新到
EmpJobs

这是我的密码

string constring = "Data Source=baker-pc;Initial Catalog=BakodahDB;Integrated Security=True"; 
string sqlQuery = "UPDATE EmpJobs SET Hours_Spent=@Hours_Spent, Job_Date =@Job_Date" +
                  " WHERE Client_Name=@Client_Name AND Emp_Name=@Emp_Name";

SqlConnection conDataBase = new SqlConnection(constring);
SqlCommand sqlCommand = new SqlCommand(sqlQuery, conDataBase);

conDataBase.Open();

sqlCommand.CommandText = sqlQuery;
sqlCommand.Parameters.Add("@Hours_Spent",SqlDbType.Int).Value = comboBox3.SelectedItem;
sqlCommand.Parameters.Add("@Job_Date",SqlDbType.Date).Value = Convert.ToDateTime(dateTimePicker1.Text);
sqlCommand.Parameters.Add("@Client_Name",SqlDbType.VarChar).Value = comboBox1.SelectedItem;
sqlCommand.Parameters.Add("@Emp_Name",SqlDbType.VarChar).Value = comboBox2.SelectedItem;

sqlCommand.ExecuteNonQuery();
conDataBase.Close();

MessageBox.Show("Saved!");

它在VisualStudio上没有显示任何错误,但是当我检查数据库时,没有任何数据没有插入到表中。问题是什么?

如果您不知道该ClientName和EmployeeName是否存在记录,并且希望插入(如果该记录不存在)或更新(如果该记录存在),则可以使用一个名为

Merge命令后跟目标表名及其别名(empt),然后使用搜索记录存在所需的两个参数构建一个伪记录。此伪记录与目标表匹配。
此时,您可以编写语句,以便在找到匹配项(更新集…)或未找到匹配项(插入…值)时使用。不要忘记最后的分号。

如果您不知道该ClientName和EmployeeName是否存在记录,并且希望插入(如果该记录不存在)或更新(如果该记录存在)然后可以使用一个名为

Merge命令后跟目标表名及其别名(empt),然后使用搜索记录存在所需的两个参数构建一个伪记录。此伪记录与目标表匹配。
此时,您可以编写语句,以便在找到匹配项(更新集…)或未找到匹配项(插入…值)时使用。不要忘记最后的分号。

您确实不应该跨表重复值(客户端名称、Emp名称)。我建议您在上查看路易斯·戴维森关于数据库设计的幻灯片

合并是一个选项,您也可以使用upsert

也就是说,类似的方法可能会奏效:

string sqlQuery = @"
declare @Client_ID int;
declare @Emp_ID    int;

select @Client_ID = Client_ID from dbo.Clients c   where c.Client_Name = @Client_Name;
select @Emp_ID    = Emp_ID    from dbo.Employees e where e.Emp_Name    = @Emp_Name;

begin tran;
if exists (select 1 from dbo.EmpJobs j with (updlock,serializable) where j.Client_ID=@Client_ID and j.Emp_ID=@Emp_ID)
  begin;
    update dbo.EmpJobs set 
        Hours_Spent = @Hours_Spent
      , Job_Date    = @Job_Date
      where Client_ID = @Client_ID and Emp_ID=@Emp_ID;
    end;
  else begin;
    insert into dbo.EmpJobs (Emp_ID, Emp_Name, Client_ID, Client_Name, Hours_Spent, Job_Date)
      select @Emp_ID, @Emp_Name, @Client_ID, @Client_Name, @Hours_Spent, @Job_Date;
    end;
    commit tran;";

您确实不应该在表之间重复值(Client\u Name、Emp\u Name)。我建议您在上查看路易斯·戴维森关于数据库设计的幻灯片

合并是一个选项,您也可以使用upsert

也就是说,类似的方法可能会奏效:

string sqlQuery = @"
declare @Client_ID int;
declare @Emp_ID    int;

select @Client_ID = Client_ID from dbo.Clients c   where c.Client_Name = @Client_Name;
select @Emp_ID    = Emp_ID    from dbo.Employees e where e.Emp_Name    = @Emp_Name;

begin tran;
if exists (select 1 from dbo.EmpJobs j with (updlock,serializable) where j.Client_ID=@Client_ID and j.Emp_ID=@Emp_ID)
  begin;
    update dbo.EmpJobs set 
        Hours_Spent = @Hours_Spent
      , Job_Date    = @Job_Date
      where Client_ID = @Client_ID and Emp_ID=@Emp_ID;
    end;
  else begin;
    insert into dbo.EmpJobs (Emp_ID, Emp_Name, Client_ID, Client_Name, Hours_Spent, Job_Date)
      select @Emp_ID, @Emp_Name, @Client_ID, @Client_Name, @Hours_Spent, @Job_Date;
    end;
    commit tran;";

无法使用UPDATE语句插入数据。它只能更新现有数据,如果您正在寻找upsert,那么google sql Merge将无法使用update语句插入数据。它只能更新现有数据,如果您正在查找Upert,那么google sql mergeforget a=在ename之后,删除try nowforget a=在ename之后,删除try now