我写过这个剧本,但由于某些原因,它给了我一些错误,我不明白为什么
这就是我所拥有的:
conn.Open();
int maxRow = Int32.Parse(cmd.ExecuteScalar().ToString());
sSql = "select * from P_MKZGood";
if (flag == true)
{
sSql += "where IsCommend = 1";
}
cmd.CommandText = sSql;
SqlDataReader reader = cmd.ExecuteReader();
ArrayList gInfos = new ArrayList();
GoodsInfo gInfo;
for (int i = 0; i < maxRow; i++)
{
if (reader.Read())
{
gInfo = new GoodsInfo();
错误=
[SqlException(0x80131904):'='附近的语法不正确。]
int maxRow = Int32.Parse(cmd.ExecuteScalar().ToString());
那部分有什么问题?谢谢!
现在修复了,谢谢你们,我对这个错误感觉多么愚蠢;)
答案 0 :(得分:6)
您的SQL字符串需要P_MKZGood
和where
之间的空格。
答案 1 :(得分:2)
好的,你添加了一个asp.net错误的图片,它显示了你得到SqlException的行号:
int maxRow = Int32.Parse(cmd.ExecuteScalar().ToString());
此时cmd.CommandText的值是什么(我无法分辨,因为您没有在此行上方包含代码),很可能有一个类似于代码中的t-sql语法错误我在下面提到过:
尝试在表名后添加空格:
sSql = "select * from P_MKZGood ";
使用当前代码,如果flag设置为true,那么您将创建以下t-sql命令文本:
从P_MKZGoodwhere IsCommend = 1
中选择*
请注意 P_MKZGood 与 之间没有空格。这是一种语法违规,导致抛出SqlException。
答案 2 :(得分:0)
@SLaks和@Phage已经确切地指出了你的问题,但我想加上自己的两分钱。如果您在cmd.CommandText = sSql;
行上设置断点,那么当sSql
等于flag == true
时,您会看到select * from P_MKZGoodwhere IsCommend = 1
。 (也就是说,P_MKZGood
和where
之间没有空格。)
您需要的是select * from P_MKZGood where IsCommend = 1
。我建议在
sSql += "where IsCommend = 1";
所以它恰好是
sSql += " where IsCommend = 1";
答案 3 :(得分:0)
基于您之前和此问题,我认为您需要以下方法。正如其他人所提到的,你可以在编码中改进许多错误和地方。检查以下代码。
public List<GoodsInfo> GetGoodsList(bool flag)
{
List<GoodsInfo> gInfos = new List<GoodsInfo>();
using (SqlConnection sConn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["Conn"].ToString()))
{
sConn.Open();
using (SqlCommand sCmd = new SqlCommand())
{
sCmd.Connection = sConn;
sCmd.CommandText = "select * from P_MKZGood" + (flag ? " where IsCommend = 1" : string.Empty);
using (SqlDataReader sqlReader = sCmd.ExecuteReader())
{
while (sqlReader.Read())
{
GoodsInfo gInfo = new GoodsInfo();
gInfo.G_ID = Int32.Parse(sqlReader["G_ID"].ToString());
gInfo.G_Name = sqlReader["G_Name"].ToString();
gInfo.Type = sqlReader["Type"].ToString();
gInfo.GoodsType = sqlReader["GoodsType"].ToString();
gInfos.Add(gInfo);
}
}
}
}
return gInfos;
}
几点:
List<GoodsInfo>
的用户类型列表,而不是使用非类型安全的ArrayList。while (sqlReader.Read())
using
块与一次性对象一起使用,而无需通过代码关闭连接等。 答案 4 :(得分:0)
在你的语句中代码
上的字符串 sSql = "select * from P_MKZGood"
if (flag == true)
{
sSql += "where IsCommend = 1";
}
这里的最终字符串是:从P_MKZGoodwhere中选择* IsCommend = 1“
将出现错误“语法不正确=”
您需要在“P_MKZGood”之前或之后指定空格,如此
sSql = "select * from P_MKZGood "
或
sSql += " where Iscommend = 1"
然后最后的字符串将是:从P_MKZGood中选择*,其中IsCommend = 1“
此处没有错误