【发布时间】:2012-09-27 06:11:05
【问题描述】:
我正在尝试使用表单中的数据将数据输入我的 SQL Server 2008。我正在使用 DateTimePicker 从表单中选择日期并将此数据输入到数据库中,但是当我尝试运行表单时出现以下错误:
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
声明已终止
这是我下面表格的代码:
private void btnAddBooking_Click(object sender, EventArgs e)
{
DateTime requested = dtpRequested.Value;
DateTime pickup = dtpPickup.Value;
DateTime estDropoff = dtpEstimatedDrop.Value;
SAF.AddNewBooking(requested, pickup, estDropoff, selectedStatus.StatusId, selectedRate.RateId);
dtpRequested.CustomFormat = " ";
dtpPickup.CustomFormat = " ";
dtpEstimatedDrop.CustomFormat = " ";
cbStatus.SelectedIndex = 0;
cbRateOfPayment.SelectedIndex = 0;
MessageBox.Show("Booking Created");
tabControl2.SelectTab(2);
}
这是我存储方法的外观中的代码:
public void AddNewBooking(DateTime requestedD, DateTime pickupD, DateTime estDropOff, int statusId, int rateId)
{
dao.AddNewBooking(requestedD, pickupD, estDropOff, statusId, rateId);
}//end CreateBooking
这是我的 DAO 中的 INSERT 语句代码:
sql = "INSERT INTO [Transaction] (TransactionId, RequestedDateOfPickup, ActualDateOfPickup, EstimatedDropOffDate, StatusId, RateId)";
sql += String.Format("VALUES('{0}', '{1}', '{2}', '{3}', {4}, {5})", transactionId, requestedD, pickupD, estDropOff, statusId, rateId);
cn = new SqlConnection(Properties.Settings.Default.UKRENTALSConnectionString);
cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.ExecuteNonQuery();
【问题讨论】:
-
使用Parameters,可以让你免于SQL注入,也可以解决你的错误。
-
一切进展顺利,直到您决定放弃数据类型并将所有内容都视为字符串。正如@Habib 提到的,您应该使用参数。此外,
Transaction是一个非常糟糕的表名称(就像任何其他关键字一样)
标签: c# .net sql-server-2008