无法将参数值从Int32转换为DateTime

时间:2016-05-26 09:53:52

标签: c# sql-server

我搜索了所有网站,但没有找到解决我问题的方法。我是c#和堆栈溢出社区的新手,但我真的陷入了这个问题。

我有一个按钮,可以将日期和时间分别添加到datagridview。在填充行时,我在SQL Server中保存行值,但是当我在c#中发送database.data类型时它给出异常Failed to convert parameter value from a Int32 to a DateTime,而SQL Server是Datetime

以下是向datagridview添加日期和时间的代码

private void addDateTime2_Click(object sender, EventArgs e)
{
    int n = dataGridView2.Rows.Add();
    dataGridView2.Rows[n].Cells[0].Value =  dateTimePicker9.Value.ToString("dd-MM-yyyy");
    dataGridView2.Rows[n].Cells[1].Value = dateTimePicker7.Value.ToString("HH:mm:ss"); 
}

以下是我插入数据库的代码:

for (int i = 0; i < dataGridView2.Rows.Count; i++)
    {
    string StrQuery = "INSERT INTO [dbo].[callRedirect]  (ISFsectionId, callRedirectDate, incidentNo, callRedirectTime, callRedirectGrade, callRedirectFName, callRedirectLName, callRedirectSerialNo, callRedirectRemark) VALUES (@ISFsectionId, @callRedirectDate, @incidentNo, @callRedirectTime, '" 
+ dataGridView2.Rows[i].Cells["Column12"].Tag + "', '" + dataGridView2.Rows[i].Cells["Column13"].Value + "', '" + dataGridView2.Rows[i].Cells["Column14"].Value + "', '" + dataGridView2.Rows[i].Cells["Column20"].Value + "', '" + dataGridView2.Rows[i].Cells["Column19"].Value + "')";
    SqlCommand cmd = cnn.CreateCommand();
    cmd.CommandText = StrQuery;
    cmd.Parameters.AddWithValue("@incidentNo", textBox4.Text);
    cmd.Parameters.AddWithValue("@callRedirectDate",  dataGridView2.Rows[i].Cells[0].Value);
    cmd.Parameters.AddWithValue("@callRedirectTime", dataGridView2.Rows[i].Cells[1].Value);
    cmd.Parameters.Add("@ISFsectionId", SqlDbType.DateTime).Value = dataGridView2.Rows[i].Cells["Column11"].Tag;
    cmd.Connection = cnn;
    cmd.ExecuteNonQuery();

    }

1 个答案:

答案 0 :(得分:1)

唯一可能引发此错误的行是

cmd.Parameters.Add("@ISFsectionId", SqlDbType.DateTime).Value = 
                    dataGridView2.Rows[i].Cells["Column11"].Tag;

我严重怀疑您的ISFsectionIddatetime。我还打赌Tag包含一个整数。

另请注意,您的网格包含字符串值而不是DateTimes。这意味着您要么使用实际datetime的字符串字段,要么ADO.NET意外地将您的字符串解析为基础类型。我不小心说,因为如果代码在具有不同格式的语言环境上运行,这可能会破坏。

要避免转换问题,请在数据库中使用datetime类型,并在加载它们并将它们绑定到网格时不要将它们转换为字符串。使用每列的DataGridViewStyle.Format属性指定希望如何显示