C# 插入数据项与外键约束冲突

C# 插入数据项与外键约束冲突,c#,sql,winforms,visual-studio-2010,C#,Sql,Winforms,Visual Studio 2010,我正在创建一个关于快递服务的项目。我在运行时尝试输入值时出现此错误。我有两个insert语句,一个用于发送方,另一个用于接收方。但问题存在于发送方的insert语句和LoginID中。实际上,我想在“Sender”表中添加登录用户,这样我就可以看到,登录用户有多少条目。首先,我使用以下语句从“Login”表中获取LoginID log_id = Convert.ToInt32(dt.Rows[0][0]); 其中log_id是一个整数变量。dt是一个数据表名 它工作得很好。我使用message

我正在创建一个关于快递服务的项目。我在运行时尝试输入值时出现此错误。我有两个insert语句,一个用于发送方,另一个用于接收方。但问题存在于发送方的insert语句和LoginID中。实际上,我想在“Sender”表中添加登录用户,这样我就可以看到,登录用户有多少条目。首先,我使用以下语句从“Login”表中获取LoginID

log_id = Convert.ToInt32(dt.Rows[0][0]);
其中log_id是一个整数变量。dt是一个数据表名

它工作得很好。我使用messagebox看到了它

然后我创建了一个公共变量,在其他表单上使用它

public int logId
{
    get { return log_id; }
}
然后我在我的数据输入表单上这样调用这个变量

public StdExpIntl(int logId)
{
    InitializeComponent();
    logID = logId;
}
这是我的Insert语句

Insert into Sender(CourierNo,LoginID,SenderName) values ('" + cNo.Text + "','"+logID+"', '" + Name1.Text + "')", con);
这不是完整的声明,但我想现在还可以

登录表

LoginID numeric(18, 0)  NOT NULL
StaffID varchar(15) NOT NULL
username    varchar(10) NOT NULL
password    varchar(10) NOT NULL
发送者表

CourierNo   varchar(15) NOT NULL
LoginID numeric(18, 0)  NOT NULL
SenderName  text    NOT NULL
SenderNIC   numeric(18, 0)  NOT NULL
SenderCountry   text    NOT NULL
SenderState text    NOT NULL
错误在LoginID中,请有人帮助我。

试试看

Insert into Sender(CourierNo,LoginID,SenderName) values 
('" + cNo.Text + "'," + logID + ", '" + Name1.Text + "')", con);

我删除了logID的单引号

您将变量设置为自身

public StdExpIntl(int logId)
    {
        InitializeComponent();
        logID = logId;
    }
你想要

public StdExpIntl(int logId)
    {
        InitializeComponent();
        log_id = logId;
    }
我看到以下情况: insert语句在每个要插入的参数周围使用单引号,包括LogID。由于LogID是数字的,因此不需要它,因此您的insert语句应该如下所示:

Insert into Sender(CourierNo,LoginID,SenderName) values ('" + cNo.Text + "',"+logID+", '" + Name1.Text + "');
为了防止以这种方式对查询进行微观管理,可以使用参数化查询

using (SqlConnection connection = new SqlConnection(ConnectionString))
{
    using (SqlCommand command = new SqlCommand("Insert into Sender(CourierNo,LoginID,SenderName) values (@courierNo, @loginId, @senderName)",connection))
    {

        command.Parameters.Add(new SqlParameter("courierNo", cNo.Text));
        command.Parameters.Add(new SqlParameter("loginId", logID));
        command.Parameters.Add(new SqlParameter("senderName", Name1.Text));
        connection.Open();
        command.ExecuteNonQuery();
        connection.Close();
    }
}

使用参数,这是你更大的问题。你能解释一下吗?我不明白你为什么要插入主键。你不能让它自动递增或生成吗?不,它不是自动生成的,它只是给我登录用户的登录ID,这样我就可以看到登录用户做了多少项。你发布的代码甚至不会编译。显示您的实际代码。此外,logID是StdExpIntl的局部变量,而logID是导入的变量,这是有区别的。您需要在
新的SqlParameter
名称中包含
@
,并且可能希望将
.Value=something
添加到
参数中。add()
s.@Dour High-Arch:你说的是一种更通用的实现吗?目前看来,它应该适用于sql server,但我忘了在sqlcommand结构中添加连接对象,我现在添加了连接对象。我的意思是将
SqlParameter
与like
command.Parameters.add(“@courierNo”,SqlDbType.VarChar).Value=cNo.Text
一起使用。