Windows CE (System.Data.SQLClient) 上的异常 'SqlException'
Exception 'SqlException' on Windows CE (System.Data.SQLClient)
执行命令时给出以下 SqlException
。已建立连接。客户端 OS 是一个模拟的 Windows CE 查询 SQL Server 2012 数据库。
这一行抛出异常:
SqlDataReader reader = Shared.command.GetCommand().ExecuteReader();
Shared 是 class 个具有初始化静态对象的变量。
代码
class Connect
{
SqlConnection connect = new SqlConnection();
public SqlConnection GetConnection()
{
return connect;
}
public void SetConnection(string server, string database, string user, string password)
{
connect.ConnectionString = "Data Source=" + server + "; Initial Catalog=" + database + "; User ID=" + user + "; Password=" + password + ";";
}
public void Open()
{
try
{
connect.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
class Command
{
public Command()
{
command.Connection = Shared.connect.GetConnection();
}
SqlCommand command = new SqlCommand();
public SqlCommand GetCommand()
{
return command;
}
public void SetCommand(string commandText, List<SqlParameter> parameters)
{
command.CommandText = commandText;
foreach (SqlParameter parameter in parameters)
command.Parameters.Add(parameter);
}
}
List <SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("BARCODE", tbxBarcode.Text));
Shared.command.SetCommand("SELECT * FROM table WHERE BARCODE_STRING = @BARCODE", parameters);
IV_Barcode barcode = new IV_Barcode();
DataTable table = barcode.Execute();
堆栈跟踪
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, TdsParserState state)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, TdsParserState state)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior run, SqlCommand cmdHandler, SqlDataReader dataStream)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at Inventory_Checker.IV_Barcode.Execute()
at Inventory_Checker.frmMain.tbxBarcode_LostFocus(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnLostFocus(EventArgs e)
at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at Inventory_Checker.Program.Main()
问题已解决。我的 SQL 参数是问题的原因。
以下必须更改...
List <SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("BARCODE", tbxBarcode.Text));
Shared.command.SetCommand("SELECT * FROM table WHERE BARCODE_STRING = @BARCODE", parameters);
IV_Barcode barcode = new IV_Barcode();
DataTable table = barcode.Execute();
...为此:
List <SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@BARCODE", tbxBarcode.Text));
Shared.command.SetCommand("SELECT * FROM table WHERE BARCODE_STRING = @BARCODE", parameters);
IV_Barcode barcode = new IV_Barcode();
DataTable table = barcode.Execute();
执行命令时给出以下 SqlException
。已建立连接。客户端 OS 是一个模拟的 Windows CE 查询 SQL Server 2012 数据库。
这一行抛出异常:
SqlDataReader reader = Shared.command.GetCommand().ExecuteReader();
Shared 是 class 个具有初始化静态对象的变量。
代码
class Connect
{
SqlConnection connect = new SqlConnection();
public SqlConnection GetConnection()
{
return connect;
}
public void SetConnection(string server, string database, string user, string password)
{
connect.ConnectionString = "Data Source=" + server + "; Initial Catalog=" + database + "; User ID=" + user + "; Password=" + password + ";";
}
public void Open()
{
try
{
connect.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
class Command
{
public Command()
{
command.Connection = Shared.connect.GetConnection();
}
SqlCommand command = new SqlCommand();
public SqlCommand GetCommand()
{
return command;
}
public void SetCommand(string commandText, List<SqlParameter> parameters)
{
command.CommandText = commandText;
foreach (SqlParameter parameter in parameters)
command.Parameters.Add(parameter);
}
}
List <SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("BARCODE", tbxBarcode.Text));
Shared.command.SetCommand("SELECT * FROM table WHERE BARCODE_STRING = @BARCODE", parameters);
IV_Barcode barcode = new IV_Barcode();
DataTable table = barcode.Execute();
堆栈跟踪
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, TdsParserState state)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, TdsParserState state)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior run, SqlCommand cmdHandler, SqlDataReader dataStream)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at Inventory_Checker.IV_Barcode.Execute()
at Inventory_Checker.frmMain.tbxBarcode_LostFocus(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnLostFocus(EventArgs e)
at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at Inventory_Checker.Program.Main()
问题已解决。我的 SQL 参数是问题的原因。
以下必须更改...
List <SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("BARCODE", tbxBarcode.Text));
Shared.command.SetCommand("SELECT * FROM table WHERE BARCODE_STRING = @BARCODE", parameters);
IV_Barcode barcode = new IV_Barcode();
DataTable table = barcode.Execute();
...为此:
List <SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@BARCODE", tbxBarcode.Text));
Shared.command.SetCommand("SELECT * FROM table WHERE BARCODE_STRING = @BARCODE", parameters);
IV_Barcode barcode = new IV_Barcode();
DataTable table = barcode.Execute();