我正在尝试调用存储过程以进行插入:
private void button1_Click(object sender, EventArgs e)
{
string connectionString = @"Data Source=******;Initial Catalog=**********;Integrated Security=True";
using (SqlConnection sqlCon = new SqlConnection(connectionString: connectionString))
{
using (SqlCommand cmd = new SqlCommand("InsertAngajat", sqlCon))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Nume", SqlDbType.VarChar).Value = textBox1.Text;
cmd.Parameters.Add("@Prenume", SqlDbType.VarChar).Value = textBox2.Text;
cmd.Parameters.Add("@DataNasterii", SqlDbType.Date).Value = textBox4.Text;
cmd.Parameters.Add("@DataAngajare", SqlDbType.Date).Value = DateTime.Today.ToString();
cmd.Parameters.Add("@cnp", SqlDbType.Char).Value = textBox3.Text.ToCharArray();
cmd.Parameters.Add("@Localitate", SqlDbType.VarChar).Value = textBox8.Text;
cmd.Parameters.Add("@Judet", SqlDbType.VarChar).Value = textBox10.Text;
cmd.Parameters.Add("@Strada", SqlDbType.VarChar).Value = textBox9.Text;
cmd.Parameters.Add("@Departament", SqlDbType.VarChar).Value = comboBox1.Text;
cmd.Parameters.Add("@Telefon", SqlDbType.Char).Value = textBox5.Text.ToCharArray();
if (checkBox1.Checked)
cmd.Parameters.Add("@Sex", SqlDbType.Char).Value = 'M';
else if (checkBox2.Checked)
cmd.Parameters.Add("@Sex", SqlDbType.Char).Value = 'F';
else
MessageBox.Show("Nu a fost bifat sexul");
cmd.Parameters.Add("@Numar", SqlDbType.Int).Value = Convert.ToInt32(textBox11.Text);
cmd.Parameters.Add("@Salariu", SqlDbType.Int).Value = Convert.ToInt32(textBox6.Text);
sqlCon.Open();
cmd.ExecuteNonQuery();
}
}
this.Close();
}
但这是我按下按钮并保存所有内容时遇到的错误。
https://i.imgur.com/0tixhsu.png
这是SQL Server存储过程:
ALTER PROCEDURE [dbo].[InsertAngajat]
@Nume VARCHAR(50),
@Prenume VARCHAR(50),
@Departament VARCHAR(50),
@cnp CHAR(13),
@DataNasterii DATE,
@Telefon VARCHAR(12) = "NONE",
@DataAngajare DATE,
@Salariu INT,
@Sex CHAR(1) = 'F',
@Judet VARCHAR(50),
@Localitate VARCHAR(50),
@Strada VARCHAR(50),
@Numar INT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DepID INT = (SELECT D.DepartamentID
FROM Departamente D
WHERE D.[Nume Departament] = @Departament);
INSERT INTO [dbo].Angajat (Nume, Prenume, DepartamentID, CNP, DataNasterii,
Telefon, DataAngajarii, Salariu, Sex, Localitate,
[Sector/Judet], Strada, nr)
VALUES (@Nume, @Prenume, @DepID, @cnp, @DataNasterii,
@Telefon, @DataAngajare, @Salariu, @Sex, @Localitate,
@Judet, @Strada, @Numar)
END
我确保文本框包含数据。我不知道还能尝试什么。
我希望只要文本框中的值不是NULL
,就可以轻松插入其所有数据。
答案 0 :(得分:5)
在我看来,您的问题可能在于此行:
Declare @DepID int = (Select D.DepartamentID From Departamente D Where D.[Nume Departament] = @Departament);
如果该查询没有结果怎么办?我有些生疏,但我想@DepId
将是NULL
。然后,当您尝试将其插入表中时,将插入一个空值。
解决方案:在您的程序中,或者在调用插入项之前,请检查该部门是否存在。
答案 1 :(得分:0)
运行您的sql事件探查器并跟踪调用。这样,您将确定所有输入参数。然后手动执行您的过程调用。您将可以在过程中找到确切的问题和具体内容。尝试使用@DepID int = 1的固定值。如果运行成功。然后,您必须优化此代码行,如下所示: 声明@DepID int =(从部门D的D中选择isull(D.DepartamentID,0),其中D. [Nume Departament] = @Departament);
您的部门表似乎没有该部门的数据。