[英]System.FormatException: 'Failed to convert parameter value from a String to a Boolean.'
[英]System.FormatException: 'Failed to convert parameter value from a String to a Int32.'
当我尝试使用 c# windows 表单将数据传递到我的数据库时,标题中不断出现错误。
作为参考,我正在尝试使用Scope_Identity从一个表中获取当前PK ,然后将其作为FK传递给另一个表。 但我无法完成这项工作。 我毫不怀疑我遗漏了什么或做错了什么,但老实说我找不到解决我需要的方法。 这是我正在使用的代码。
SqlConnection con = new SqlConnection(@"");
con.Open();
{
using (SqlCommand cmd = new SqlCommand("INSERT dbo.Booking(CustomerID,VehicleID,DateofBooking," +
"DurationBooked, ExpectedReturnDate) VALUES( @CustID, @VehicleID, @DOBooking, @DurationBooked,@ExpectedReturn); INSERT dbo.Payments (BookingID,PaymentMethod,Discount,PaymentAmount," +
"PaymentDate,PaymentReceived) VALUES( SCOPE_IDENTITY(),@PayMeth,@PayAmount,@PayDate, @PayReceived, @Discount)"))
{
cmd.Connection = con;
cmd.Parameters.Add("@CustID", SqlDbType.Int).Value = comboBox1.ValueMember;
cmd.Parameters.Add("@VehicleID", SqlDbType.Int).Value = comboBox2.ValueMember;
cmd.Parameters.Add("@DOBooking", SqlDbType.Date).Value = datefrom.Text;
cmd.Parameters.Add("@ExpectedReturn", SqlDbType.Date).Value = dateTo.Text;
cmd.Parameters.Add("@DurationBooked", SqlDbType.Float, 3).Value = Duration.Text;
cmd.Parameters.Add("@PayMeth", SqlDbType.VarChar, 15).Value = listBox1.Text;
cmd.Parameters.Add("@PayAmount", SqlDbType.Money).Value = PayAmount.Text;
cmd.Parameters.Add("@PayDate", SqlDbType.Date).Value = DatePay.Text;
cmd.Parameters.Add("@PayReceived", SqlDbType.VarChar, 3).Value = PayReceived.Text;
cmd.Parameters.Add("@Discount", SqlDbType.SmallMoney).Value = Discount.Text;
}
我在尝试将此PK作为FK传递给另一个表时遇到了很多麻烦供参考,我试图将预订表中的BookingID传递给BookingID列中的付款表,这是一种FK关系
我认为您正在尝试解决另一个问题。 您有转换问题,但不是 PK 或 FK 密钥一致性。
请检查您发送的所有参数是否与您的说明中描述的类型相同。
也可能是您的 scope_identity() 的类型与值不同。 我不知道你是否用 Keys 约束覆盖了这个
顺便一提。 出 scope。还有一种获取最后一个 ID 的方法是使用@@IDENTITY。
@@identity function 返回在同一个 session 中创建的最后一个身份。scope_identity() function 返回在同一个 session 和同一个 scope 中创建的最后一个身份。
固定的。 感谢所有提供帮助的人。 问题确实出在我的参数上,特别是日期。 我需要将 SQL 服务器中的 DataType 更改为DateTime ,并确保查询将在 SQL 服务器中运行首先提供帮助。
using (SqlCommand cmd = new SqlCommand("INSERT dbo.Booking(CustomerID,VehicleID,DateofBooking, DurationBooked, ExpectedReturnDate) " +
"VALUES( @CustID, @VehicleID, @DOBooking, @DurationBooked,@ExpectedReturn) SELECT SCOPE_IDENTITY(); " +
"INSERT dbo.Payments (BookingID,PaymentMethod,Discount,PaymentAmount, PaymentDate,PaymentReceived)" +
"VALUES( SCOPE_IDENTITY(),@PayMeth,@Discount,@PayAmount, @PayDate, @PayReceived)"))
{
cmd.Connection = con;
cmd.Parameters.Add("@CustID", SqlDbType.Int).Value = Convert.ToInt32(CustID.SelectedValue);
cmd.Parameters.Add("@VehicleID", SqlDbType.Int).Value = Convert.ToInt32(VehicleID.SelectedValue);
cmd.Parameters.Add("@DOBooking", SqlDbType.DateTime).Value = DateofBooking.Value.Date;
cmd.Parameters.Add("@ExpectedReturn", SqlDbType.DateTime).Value = ExpectedReturnDate.Value.Date;
cmd.Parameters.Add("@DurationBooked", SqlDbType.Float, 3).Value = Duration.Text;
cmd.Parameters.Add("@PayMeth", SqlDbType.VarChar, 15).Value = PaymentMethod.Text;
cmd.Parameters.Add("@PayAmount", SqlDbType.Money).Value = PayAmount.Text;
cmd.Parameters.Add("@PayDate", SqlDbType.DateTime).Value = PayDate.Value.Date;
cmd.Parameters.Add("@PayReceived", SqlDbType.VarChar, 3).Value = Received.Text;
cmd.Parameters.Add("@Discount", SqlDbType.VarChar, 3).Value = Discount.Text;
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("Record inserted");
}
else
{
MessageBox.Show("Customer failed");
}
对于 Ref, Scope_Identity工作得很好。
感谢您的所有支持,我知道这对你们中的一些人来说似乎很基本,但我对这一切都是陌生的,并且正在尝试自学,所以您可以想象..即使这个小问题得到解决,我也松了一口气。 多谢你们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.