C# SQL选择查询未选择
我正在尝试使用System.data.SqlClient;使用C查询SQL表中的数据;。我可以毫无问题地从表中选择*。我怀疑我的问题可能是由于数据类型,可能是无意中错误地转换了一些变量。我得到的错误是:当没有数据存在时,读取数据的尝试无效 进一步详情: 在我的SQL表中,Column1和Column3的类型为int。Column2和Column4的类型为char1。第5列的类型为小数5,4 请您帮助识别以下代码中的问题,好吗C# SQL选择查询未选择,c#,sql,syntax,type-conversion,C#,Sql,Syntax,Type Conversion,我正在尝试使用System.data.SqlClient;使用C查询SQL表中的数据;。我可以毫无问题地从表中选择*。我怀疑我的问题可能是由于数据类型,可能是无意中错误地转换了一些变量。我得到的错误是:当没有数据存在时,读取数据的尝试无效 进一步详情: 在我的SQL表中,Column1和Column3的类型为int。Column2和Column4的类型为char1。第5列的类型为小数5,4 请您帮助识别以下代码中的问题,好吗 public void Score(List<Tuple<
public void Score(List<Tuple<int, char>> myList)
{
int myColumn1 = myList[0].Item1;
char myColumn2 = myList[0].Item2;
int myColumn3 = myList[1].Item1;
char myColumn4 = myList[1].Item2;
myConnection.Open();
SqlCommand myCommand = new SqlCommand("SELECT * FROM table" +
" WHERE Column1 = " + myColumn1 +
" AND Column2 = '" + myColumn2 +
"' AND Column3 = " + myColumn3 +
" AND Column4 = '" + myColumn4 + "'", myConnection);
SqlDataReader myReader = null;
myReader = myCommand.ExecuteReader();
Console.Out.WriteLine(myReader[5].ToString());
}
谢谢大家! 从数据库检索数据后,您必须: 您可以在上看到一个示例 还有几点需要注意:
如果MyReLead(5)可能为NULL,则考虑使用Realth.ToStutyMyRead(5)。这将返回一个空字符串,而不是引发异常
如果您使用的是.NET4.5,那么您可以尝试以下方法:myReader.GetFieldValue5使用参数化查询避免sql注入
myCommand = new SqlCommand("SELECT * FROM table
WHERE Column1=@column1
AND Column2 =@myColumn2
AND Column3 = @myColumn3
AND Column4 =@myColumn4", myConnection);
myCommand.Parameters.AddWithValue("@column1", value1);
myCommand.Parameters.AddWithValue("@myColumn2", value2);
myCommand.Parameters.AddWithValue("@myColumn3", value3);
myCommand.Parameters.AddWithValue("@myColumn3", value4);
using(SqlDataReader reader = myCommand.ExecuteReader())
{
while(reader.Read())
{
//code here
}
}
您已经初始化了mycommand两次,因此您需要研究如何为sql使用参数。您正在进行SQL注入攻击。重复、、和其他。您的字符列是否填充了空格,从而阻止了匹配?此外,您可以将该行压缩为var myReader=myCommand.ExecuteReader;。
myCommand = new SqlCommand("SELECT * FROM table
WHERE Column1=@column1
AND Column2 =@myColumn2
AND Column3 = @myColumn3
AND Column4 =@myColumn4", myConnection);
myCommand.Parameters.AddWithValue("@column1", value1);
myCommand.Parameters.AddWithValue("@myColumn2", value2);
myCommand.Parameters.AddWithValue("@myColumn3", value3);
myCommand.Parameters.AddWithValue("@myColumn3", value4);
using(SqlDataReader reader = myCommand.ExecuteReader())
{
while(reader.Read())
{
//code here
}
}