private void BtnSave_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConn = new SqlConnection("Data Source=TANYA-PC;Initial Catalog=biore1;Integrated Security=True")) //or variable to it
{
string sqlQuery = @"INSERT INTO cottonpurchase VALUES(@slipno, @purchasedate, @farmercode, @farmername, @villagename, @basicprice, @weight, @totalamountbasic, @premium, @totalamountpremium, @totalamountpaid, @yeildestimates)";
//NOTE: RENAME "MyTable" to your database table!!!!
using (SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn))
{
cmd.Parameters.Add("@slipno", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtSlipNo.Text)) ? int.Parse(TxtSlipNo.Text) : (object)DBNull.Value;
cmd.Parameters.Add("@purchasedate", SqlDbType.DateTime).Value = monthCalendar1.SelectionStart; //date of selection!
cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value = Convert.ToInt32(TxtFarmerCode.Text);
cmd.Parameters.Add("@farmername", SqlDbType.VarChar, 100).Value = TxtFarmerName.Text;
cmd.Parameters.Add("@villagename", SqlDbType.VarChar, 100).Value = TxtVillageName.Text;
cmd.Parameters.Add("@basicprice", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtBasicPrice.Text)) ? int.Parse(TxtBasicPrice.Text) : (object)DBNull.Value;
cmd.Parameters.Add("@weight", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtWeight.Text)) ? int.Parse(TxtWeight.Text) : (object)DBNull.Value;
cmd.Parameters.Add("@totalamountbasic", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtTotalAmountBasic.Text)) ? int.Parse(TxtTotalAmountBasic.Text) : (object)DBNull.Value;
cmd.Parameters.Add("@premium", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtPremium.Text)) ? int.Parse(TxtPremium.Text) : (object)DBNull.Value;
cmd.Parameters.Add("@totalamountpremium", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtTotalAmountPremium.Text)) ? int.Parse(TxtTotalAmountPremium.Text) : (object)DBNull.Value;
cmd.Parameters.Add("@totalamountpaid", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtTotalAmountPaid.Text)) ? int.Parse(TxtTotalAmountPaid.Text) : (object)DBNull.Value;
cmd.Parameters.Add("@yeildestimates", SqlDbType.Int).Value = (!String.IsNullOrEmpty(TxtYeildEstimates.Text)) ? int.Parse(TxtYeildEstimates.Text) : (object)DBNull.Value;
sqlConn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
当我执行此操作时,我收到一条错误消息:
输入字符串不正确 格式。
cmd.Parameters.Add( “@ farmercode”, SqlDbType.Int).Value = int.Parse(TxtFarmerCode.Text);
答案 0 :(得分:2)
错误说得非常清楚 - 显然,您尝试转换为INT
的文字实际上不是INT
数字......
也许你需要做更多这样的事情:
int farmerCode = -1;
if(int.TryParse(TxtFarmerCode.Text.Trim(), out farmerCode)
{
cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value = farmerCode;
}
else
{
cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value = DBNull.Value; // or whatever makes sense
}
这是防御性编程的基本原则 - 不仅假设转换将起作用 - 它可能不会!测试一下,使用int.TryParse
,如果你的输入是不一个数字,你需要处理它(传递NULL
或其他一些机制 - 由你决定)< / p>
答案 1 :(得分:0)
TxtFarmerCode.Text
不是有效的int
值
好:int.Parse("123")
不好:int.Parse("Not an int")
答案 2 :(得分:0)
中有什么价值
TxtFarmerCode.Text
根据SQL参数,它必须是一个整数。听起来你需要做一些输入验证,以确保它在传递给数据库之前是一个整数。
答案 3 :(得分:0)
您的错误与您的代码不符:
<强>代码强>
cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value
= Convert.ToInt32(TxtFarmerCode.Text);
错误
cmd.Parameters.Add("@farmercode", SqlDbType.Int).Value
= int.Parse(TxtFarmerCode.Text);
除此之外,很明显TxtFarmerCode.Text不会转换为有效的int 确保在将值插入数据库之前测试您的有效值,这适用于所有范围有限的变量 显然并非所有的int对农民代码都有效,所以让用户列出有效的农民代码并让他从列表中选择一个。这样就不可能选择一个不正确的农民代码。
插入主键时出现疑似错误
您正在尝试插入新记录,如果slipno
是您的主键,那么您不应该在此处允许null
以外的值,如果您尝试将现有密钥插入到表格中一个错误,永远不会发生。
最好让数据库分配主键,因为这是万无一失的。
数据库规范化
为什么表格中有farmercode
和farmername
?农民代码不是农民的身份吗?
如果是这样,存储农民姓名也是重复信息
你应该将farmid存储在表中。然后,农民ID指向表farmers
的主键,该表存储有关农民的名称和其他相关信息。
链接:
http://en.wikipedia.org/wiki/Database_normalization
http://databases.about.com/od/specificproducts/a/normalization.htm