问题描述
您好我在2017年Visual Studio社区中创建了一个IT库应用程序,代码在asp.net / C#中。当我将数据提交到SQL表时,我收到此错误
Hi i am creating a IT Inventory application in visual studio community 2017 , the code is in asp.net / C#. When i submit the data to the SQL table i received this error
System.InvalidCastException:'指定的强制转换无效。'
我的sql表查询是:
CREATE TABLE [dbo]。[工作站](
[Emp_Id] [int] IDENTITY(1,1)NOT NULL,
[Emp_Name] [varchar](30)NOT NULL,
[Emp_Surname] [varchar](30)NOT NULL,
[部门] [varchar](50)NOT NULL,
[Company] [varchar](30)NOT NULL,
[Hostname] [ nvarchar](20)NOT NULL,
[Wkst_Status] [varchar](15)NOT NULL,
[Make] [varchar](12)NOT NULL,
[型号] [varchar](15)NOT NUL L,
[SerialNumber] [nvarchar](30)NOT NULL,
[ProductNumber] [nvarchar](30)NOT NULL,
[Purch_Date ] [date] NOT NULL,
[WExpiry_Date] [date] NOT NULL,
[Memory] [nvarchar](6)NOT NULL,
[Processor] [nvarchar](10)NOT NULL,
[HDD] [nvarchar](10)NOT NULL,
[OS] [nvarchar](25)NOT NULL,
CONSTRAINT [PK__Workstat__262359ABF6F5A9AA] PRIMARY KEY CLUSTERED
(
[Emp_Id] ASC
)WITH( PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)ON [PRIMARY]
)ON [PRIMARY]
GO
CREATE TABLE [dbo].[Workstations](
[Emp_Id] [int] IDENTITY(1,1) NOT NULL,
[Emp_Name] [varchar](30) NOT NULL,
[Emp_Surname] [varchar](30) NOT NULL,
[Department] [varchar](50) NOT NULL,
[Company] [varchar](30) NOT NULL,
[Hostname] [nvarchar](20) NOT NULL,
[Wkst_Status] [varchar](15) NOT NULL,
[Make] [varchar](12) NOT NULL,
[Model] [varchar](15) NOT NULL,
[SerialNumber] [nvarchar](30) NOT NULL,
[ProductNumber] [nvarchar](30) NOT NULL,
[Purch_Date] [date] NOT NULL,
[WExpiry_Date] [date] NOT NULL,
[Memory] [nvarchar](6) NOT NULL,
[Processor] [nvarchar](10) NOT NULL,
[HDD] [nvarchar](10) NOT NULL,
[OS] [nvarchar](25) NOT NULL,
CONSTRAINT [PK__Workstat__262359ABF6F5A9AA] PRIMARY KEY CLUSTERED
(
[Emp_Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我的C#代码 ,错误出现在 if((bool)item [" Wkst_Status"])
使用System;
使用System.Collections.Generic;
使用System.ComponentModel;
使用System.Data ;
使用System.Data.SqlClient;
使用System.Drawing;
使用System.Linq;
使用System.Text;
$
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用System.Configuration;
$
$ b命名空间库存数据库$
{
;  公共部分班级工作站:表格
  {
&NBSP; &NBSP; &NBSP;私有IEnumerable< object>查询;
&NBSP; &NBSP; &NBSP;公共对象WExpiry_Date {get;私人集; }
&NBSP; &NBSP; &NBSP;公共工作站()
&NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; InitializeComponent();
&NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; private void label1_Click(object sender,EventArgs e)
&NBSP; &NBSP; &NBSP; {
$
&NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; private void label1_Click_1(object sender,EventArgs e)
&NBSP; &NBSP; &NBSP; {
$
&NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; private void Workstations_Load(object sender,EventArgs e)
&NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; // TODO:这行代码将数据加载到'iTInventoryDataSet.Workstations'表中。您可以根据需要移动或移除它。
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //this.workstationsTableAdapter.Fill(this.iTInventoryDataSet.Workstations);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; comboBox3.SelectedIndex = 0;
&NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; private void button1_Click(object sender,EventArgs e)
&NBSP; &NBSP; &NBSP; {
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SqlConnection con = new SqlConnection(@"Data Source = sh-jasonk \ dev; Initial Catalog = ITInventory; Integrated Security = True");
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //插入逻辑
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; con.Open();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; bool Wkst_Status = false;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(comboBox3.SelectedIndex == 0)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Wkst_Status = true;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Wkst_Status = false;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SqlCommand cmd = new SqlCommand
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; (@"INSERT INTO [dbo]。[工作站]
(
&NBSP;&NBSP; [EMP_NAME]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; [Emp_Surname]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;,[部门]
,[Company]
, [主机名]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; [Wkst_Status]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;,[使]¥b $ b ,[Model]
,[SerialNumber]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; [ProductNumber]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; [Purch_Date]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; [WExpiry_Date]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;,[存储器]
,[Processor]
& NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ,[HDD]
&NBSP; &NBSP; &NBSP; &NBSP; ,[OS])
&NBSP; VALUES
&NBSP; &NBSP; &NBSP; &NBSP; ('" + txtName.Text +"','" + txtSurname.Text +"','" + comboBox1.Text +"','" + comboBox2.Text +"' ,'" + txtHostName.Text +"','"
+ comboBox3.SelectedIndex +"','" + txtMake.Text +"','" + txtModel.Text +" ;','" + txtSN.Text +"','" + txtPN.Text +"','" + dateTimePicker1.Value.ToString(" yyyy / MM / dd")
+"','" + dateTimePicker1.Value.ToString(" yyyy / MM / dd")+"','" + txtMem.Text +"','" + txtProc.Text +" ;','" + txtHDD.Text +"','" + txtOS.Text +"')",con);
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //此处转换失败
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; cmd.ExecuteNonQuery();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; con.Close();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //阅读数据
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; SqlDataAdapter sda = new SqlDataAdapter(@" Select [Emp_Name],[Emp_Surname],[Department],[Company],[Hostname],[Wkst_Status],[Make],[Model]
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; [的SerialNumber],[ProductNumber],[Purch_Date],[WExpiry_Date],[存储器],[处理器],[HDD]
&NBSP; ,[OS] From [dbo]。[Workstations]",con);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; DataTable dt = new DataTable();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; sda.Fill(dt);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows.Clear();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; foreach(dt.Rows中的DataRow项目)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; int n = dataGridView1.Rows.Add();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [0] .Value = item [" Emp_Name"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [1] .Value = item [" Emp_Surname"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [2] .Value = item [" Department"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [3] .Value = item [" Company"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [4] .Value = item [" Hostname"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if((bool)item [" Wkst_Status"])
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [5] .Value =" Active"; $
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [5] .Value =" Inactive";
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [6] .Value = item [" Make"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [7] .Value = item [" Model"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [8] .Value = item [" SerialNumber"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [9] .Value = item [" ProductNumber"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [10] .Value = item [" Purch_Date"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [11] .Value = item [" WExpiry_Date"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [12] .Value = item [" Memory"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [13] .Value = item [" Processor"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [14] .Value = item [" HDD"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; dataGridView1.Rows [n] .Cells [15] .Value = item [" OS"]。ToString();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; private void label17_Click(object sender,EventArgs e)
&NBSP; &NBSP; &NBSP; {
$
&NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
namespace InventoryStock
{
public partial class Workstations : Form
{
private IEnumerable<object> query;
public object WExpiry_Date { get; private set; }
public Workstations()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void label1_Click_1(object sender, EventArgs e)
{
}
private void Workstations_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'iTInventoryDataSet.Workstations' table. You can move, or remove it, as needed.
//this.workstationsTableAdapter.Fill(this.iTInventoryDataSet.Workstations);
comboBox3.SelectedIndex = 0;
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=sh-jasonk\dev;Initial Catalog=ITInventory;Integrated Security=True");
//Insert Logic
con.Open();
bool Wkst_Status = false;
if (comboBox3.SelectedIndex == 0)
{
Wkst_Status = true;
}
else
{
Wkst_Status = false;
}
SqlCommand cmd = new SqlCommand
(@"INSERT INTO [dbo].[Workstations]
(
[Emp_Name]
,[Emp_Surname]
,[Department]
,[Company]
,[Hostname]
,[Wkst_Status]
,[Make]
,[Model]
,[SerialNumber]
,[ProductNumber]
,[Purch_Date]
,[WExpiry_Date]
,[Memory]
,[Processor]
,[HDD]
,[OS])
VALUES
('" + txtName.Text + "','" + txtSurname.Text + "','" + comboBox1.Text + "','" + comboBox2.Text + "','" + txtHostName.Text + "','" + comboBox3.SelectedIndex + "','" + txtMake.Text + "','" + txtModel.Text + "','" + txtSN.Text + "','" + txtPN.Text + "','" + dateTimePicker1.Value.ToString("yyyy/MM/dd") + "','" + dateTimePicker1.Value.ToString("yyyy/MM/dd") + "','" + txtMem.Text + "','" + txtProc.Text + "','" + txtHDD.Text + "','" + txtOS.Text + "')",con);
//Conversion failed here
cmd.ExecuteNonQuery();
con.Close();
//Reading Data
SqlDataAdapter sda = new SqlDataAdapter(@"Select [Emp_Name],[Emp_Surname],[Department],[Company],[Hostname],[Wkst_Status],[Make],[Model]
,[SerialNumber],[ProductNumber],[Purch_Date],[WExpiry_Date],[Memory],[Processor],[HDD]
,[OS] From [dbo].[Workstations]", con);
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.Rows.Clear();
foreach (DataRow item in dt.Rows)
{
int n = dataGridView1.Rows.Add();
dataGridView1.Rows[n].Cells[0].Value = item["Emp_Name"].ToString();
dataGridView1.Rows[n].Cells[1].Value = item["Emp_Surname"].ToString();
dataGridView1.Rows[n].Cells[2].Value = item["Department"].ToString();
dataGridView1.Rows[n].Cells[3].Value = item["Company"].ToString();
dataGridView1.Rows[n].Cells[4].Value = item["Hostname"].ToString();
if ((bool)item["Wkst_Status"])
{
dataGridView1.Rows[n].Cells[5].Value = "Active";
}
else
{
dataGridView1.Rows[n].Cells[5].Value = "Inactive";
}
dataGridView1.Rows[n].Cells[6].Value = item["Make"].ToString();
dataGridView1.Rows[n].Cells[7].Value = item["Model"].ToString();
dataGridView1.Rows[n].Cells[8].Value = item["SerialNumber"].ToString();
dataGridView1.Rows[n].Cells[9].Value = item["ProductNumber"].ToString();
dataGridView1.Rows[n].Cells[10].Value = item["Purch_Date"].ToString();
dataGridView1.Rows[n].Cells[11].Value = item["WExpiry_Date"].ToString();
dataGridView1.Rows[n].Cells[12].Value = item["Memory"].ToString();
dataGridView1.Rows[n].Cells[13].Value = item["Processor"].ToString();
dataGridView1.Rows[n].Cells[14].Value = item["HDD"].ToString();
dataGridView1.Rows[n].Cells[15].Value = item["OS"].ToString();
}
}
private void label17_Click(object sender, EventArgs e)
{
}
}
}
我做错了什么,我该如何纠正这个问题
What am i doing wrong and how can i rectify the issue
推荐答案
在任何一种情况下,我都有一些建议:
1。如果要表示布尔值
1. Store the Wkst_Status as a bit rather than varchar if it is meant to represent a Boolean
2,请将Wkst_Status存储为一个而不是varchar。您对Wkst_Status的值来自组合框的SelectedIndex属性。 我假设组合框中只有两个选项(true / false)和索引0 = false等。 没关系,但你还需要确保选择了一个值,
否则SelectedIndex将等于-1(不能转换为bool)。
2. Your value for Wkst_Status is derived from the SelectedIndex property of a combobox. I assume the combobox only has two options in it (true/false) and index 0 = false, etc. That's OK, but you also need to make sure that a value has been selected, otherwise the SelectedIndex will equal -1 (not castable to bool).
3。您可能希望将insert语句移动到字符串变量,以便您可以调试它并验证insert语句是否反映了有效输入
3. you may want to move the insert statement to a string variable so you can debug it and validate the insert statement is reflecting valid input
这篇关于System.InvalidCastException:'指定的强制转换无效。'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!