[英]Failed to convert parameter value from a String to a Int32 for DateTime
我有一個鏈接到SQL數據庫的C#表單,對於其中一列,我希望每次添加新行時都插入當前日期。 我不知所措,因為這段代碼在某一時刻確實在執行我想要的操作,然后在更改了幾處內容之后,現在仍然拋出錯誤“無法將參數值從String轉換為Int32”。 而且我不知道發生了什么。 這是我的表定義。 我知道值類型可能有點隨意,但是我只關心日期存儲為字符串。
CREATE TABLE [dbo].[InvTable] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Item] NVARCHAR (50) NULL,
[QuantRem] INT NULL,
[Type] NCHAR (10) NULL,
[DateOrd] NCHAR(10) NULL,
[QuantOrd] INT NULL,
[Received] BIT NULL,
[DateRec] NCHAR(10) NULL,
PRIMARY KEY CLUSTERED ([ID] ASC)
);
表單上的代碼如下。 第二個日期的定義將在以后有所不同,但我主要關心的是消除標題中的錯誤。
private void Submitbutton1_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(textBox1.Text))
{
MessageBox.Show("Cannot Submit Empty Request");
return;
}
if (comboBox1.SelectedItem == null)
{
MessageBox.Show("Please Use Drop Down Menu To Select Item Category");
return;
}
SqlDataAdapter da = new SqlDataAdapter();
da.InsertCommand = new SqlCommand("INSERT INTO InvTable VALUES(@Item, @QuantRem, @Type, @DateReq, @QuantOrd, @Received, @DateRec)", con);
da.InsertCommand.Parameters.Add("@Item", SqlDbType.NChar).Value = textBox1.Text;
da.InsertCommand.Parameters.Add("@QuantRem", SqlDbType.Int).Value = textBox2.Text;
da.InsertCommand.Parameters.Add("@Type", SqlDbType.NChar).Value = comboBox1.Text;
da.InsertCommand.Parameters.Add("@DateReq", SqlDbType.NChar).Value = DateTime.Today.ToString("d");
da.InsertCommand.Parameters.Add("@QuantOrd", SqlDbType.Int).Value = 0;
da.InsertCommand.Parameters.Add("@Received", SqlDbType.Bit).Value = 0;
da.InsertCommand.Parameters.Add("@DateRec", SqlDbType.NChar).Value = DateTime.Today.ToString("d");
con.Open();
da.InsertCommand.ExecuteNonQuery();
da.SelectCommand = new SqlCommand("SELECT * FROM InvTable WHERE Received=0", con);
con.Close();
ds.Clear();
da.Fill(ds);
invTableDataGridView.DataSource = ds.Tables[0];
textBox1.Clear();
}
因此,這段代碼曾經在某個時候起作用,給了我一個字符串“ 07/20/2015”,但現在卻給了我一個錯誤。
您是選擇錯誤數據類型的受害者。
將DateOrd
和DateRec
列類型更改為date
類型 ,並將DateTime.Today
直接傳遞給參數化查詢(因為僅保留DateTime
date部分)。
[DateOrd] date NULL,
...
...
[DateRec] date NULL,
和
da.InsertCommand.Parameters.Add("@DateReq", SqlDbType.Date).Value = DateTime.Today;
da.InsertCommand.Parameters.Add("@DateRec", SqlDbType.Date).Value = DateTime.Today;
同樣對於QuantRem
列,看起來您需要將textBox2.Text
值解析為int,然后再將其作為參數傳遞。
da.InsertCommand.Parameters.Add("@QuantRem", SqlDbType.Int).Value = int.Parse(textBox2.Text);
不要忘記使用using
語句來自動處理連接,命令和適配器,而不是手動調用Close
方法。
正如其他人所說,在可能/應該使用實際date
類型時不要使用文本...這樣可以為您現在和將來節省很多麻煩。
但是您的實際錯誤更可能是以下一行: da.InsertCommand.Parameters.Add("@QuantRem", SqlDbType.Int).Value = textBox2.Text;
您在哪里獲取文本並嘗試設置整數參數。 將該文本轉換為整數,然后設置您的integer參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.