.NET Compact Framework SqlClient异常

3

我开发的是针对Windows CE 5.0设备的应用程序,并且正试图连接到远程SQL Server。但是,如果我使用带参数的命令,就会出现异常:

{System.Data.SqlClient.SqlException: SqlException
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.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
at Test.MainForm.TestConnection()
...
}

代码:

SqlConnection conn = new SqlConnection(connectionString);  
conn.Open();  
SqlCommand cmd = conn.CreateCommand();  
cmd.CommandText = "select * from table_name where id = @id";
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("id", 1));
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];

如果不向命令添加参数,它可以正常工作。请建议我可能的原因?(我正在使用VS2008,.net compact framework 3.5)


2
异常信息是什么?看起来您忘记在添加参数行中使用 )@,例如 cmd.Parameters.Add(new SqlParameter("@id", 1)); 或者可能是类型错误。 - Soner Gönül
@SonerGönül,是的,抱歉,漏掉的括号只是帖子中的一个打字错误,但不是@。没有@的相同代码在.Net Framework 3.5项目(不是Compact)中可以工作,所以我很困惑。非常感谢! - skm
顺便提一下,完整的异常消息是:Message="SqlException" 和堆栈跟踪。 - skm
1个回答

6

在参数名前加上 '@',例如:

cmd.Parameters.Add(new SqlCeParameter("@id", 1));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接