我尝试使用ADO.NET连接到SQL Server数据库。我尝试构建一个Windows窗体并放置一些文本框和按钮,以便我可以输入值并检查数据库中的记录。但结果表明,从对象类型System.Windows.Forms,Textbox到已知的托管提供的本机类型,不存在映射。
那么,你能给我一些建议吗?
我实现了这样的代码:
using System;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace casestudy
{
public partial class Form1 : Form
{
SqlConnection vcon1 = new SqlConnection(@"Data Source=SOPHIA-PC\SQLEXPRESS;Initial Catalog=casestudy;Integrated Security=True");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
vcon1.Open();
}
catch (Exception ex)
{
MessageBox.Show("error.occured" + ex.Message);
this.Dispose();
}
}
private void Find_Click(object sender, EventArgs e)
{
string querystring = "SELECT * FROM AssignedSolution WHERE CASEID = @caseid";
SqlCommand Vcom = new SqlCommand(querystring, vcon1);
Vcom.Parameters.AddWithValue("@caseid", txtCASEID);
SqlDataReader rdr = null;
try
{
Vcom.Connection = vcon1;
Vcom.ExecuteNonQuery();
rdr = Vcom.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]);
}
Vcom.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("error.occured" + ex.Message);
}
finally
{
vcon1.Close();
vcon1.Dispose();
}
}
}
}
答案 0 :(得分:0)
我相信你的问题就在这一行:
Vcom.Parameters.AddWithValue("@caseid", txtCASEID);
请改为尝试:
Vcom.Parameters.AddWithValue("@caseid", txtCASEID.Text);
您尝试提供TextBox
到SqlParameter
的值。 AddWithValue
方法将参数名称及其值作为参数,但value参数的类型为object
,因此您不会通过尝试分配它来获得编译器的任何投诉{ {1}}。但是,txtCASEID
是 txtCASEID
而不是TextBox
;您需要使用其string
属性来获取Text
值,因此string
。