3

我有一个分配了控件的表单 在此处输入图像描述

这是我单击插入按钮时的代码

private void btnInsertRArtist_Click(object sender, EventArgs e)
    {
        SqlCommand comand = new SqlCommand("InsertRecordingArtists", conect);
        comand.CommandType = CommandType.StoredProcedure;
        try
        {
            if (txtboxRArtistName.Text == string.Empty || txtboxPlaceOB.Text == "")
            {
                errorProvider1.SetError(txtboxRArtistName, "Enter the Music category");
            }
            else
            {
                conect.Open();
                comand.Parameters.AddWithValue("@RecordingArtistName", txtboxRArtistName.Text);
                comand.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1);
                comand.Parameters.AddWithValue("@BirthPlace", txtboxPlaceOB.Text);
                SqlDataAdapter adapt = new SqlDataAdapter(comand);
                comand.ExecuteNonQuery();
                txtboxRArtistName.Text = "";
            }
        }
        finally
        {
            conect.Close();
        }
    }

但是当我插入数据时,就会出现这个异常

在此处输入图像描述

我可以在这里做什么...我的商店程序也在这里

ALTER PROCEDURE InsertRecordingArtists
 @RecordingArtistName text,
 @DateOfBirth datetime,
 @BirthPlace text

开始插入 [MusicCollection].[dbo].[RecordingArtists] ([RecordingArtistName],[DateOfBirth],[BirthPlace]) 值 (@RecordingArtistName,@DateOfBirth,@BirthPlace)

4

5 回答 5

2

You can't use DateTimePicker instance as a query parameter. Use DateTimePicker.Value instead:

comand.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1.Value);
于 2013-10-04T11:05:25.723 回答
1

改变你的

comand.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1);

comand.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1.Text);

你所做的是你不能添加一个DateTimePicker实例作为参数。AddWithValue方法将字符串作为第二个参数。用途ValueText属性。

于 2013-10-04T11:07:23.100 回答
0

dateTimePicker1 是控件而不是 DateTime 值。您需要从以下位置获取 DateTime 值:

comand.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1.Value.ToString());
于 2013-10-04T11:08:34.730 回答
0

你需要 的值dateTimePicker1,你应该改变:

command.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1);

command.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1.Value);
于 2013-10-04T11:08:38.917 回答
0

丹尼斯说的是对的。此外,如果它不起作用,您可能希望显示一条错误消息。

例如:

private void btnInsertRArtist_Click(object sender, EventArgs e)
    {
        SqlCommand comand = new SqlCommand("InsertRecordingArtists", conect);
        comand.CommandType = CommandType.StoredProcedure;
        try
        {
            if (txtboxRArtistName.Text == string.Empty || txtboxPlaceOB.Text == "")
            {
                errorProvider1.SetError(txtboxRArtistName, "Enter the Music category");
            }
            else
            {
                conect.Open();
                comand.Parameters.AddWithValue("@RecordingArtistName", txtboxRArtistName.Text);
                comand.Parameters.AddWithValue("@DateOfBirth", dateTimePicker1.Value);
                comand.Parameters.AddWithValue("@BirthPlace", txtboxPlaceOB.Text);
                SqlDataAdapter adapt = new SqlDataAdapter(comand);
                comand.ExecuteNonQuery();
                txtboxRArtistName.Text = "";
            }
        }
        catch(Exception ex)
        {  
              MessageBox.Show(ex.Message);
        }
        finally
        {
            conect.Close();
        }
    }
于 2013-10-04T11:08:42.153 回答