'='附近语法错误
本文关键字:错误 语法 | 更新日期: 2023-09-27 18:12:01
我已经写了这个脚本,但由于某些原因它给了我一些错误,我不明白为什么
这是我的:
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());
那部分有什么问题?谢谢!
现在修复了,谢谢大家,我觉得这个错误是多么愚蠢;)
您的SQL字符串在P_MKZGood
和where
之间需要一个空格
好,您添加了asp.net错误的图像,它显示了您获得SqlException的行号:
int maxRow = Int32.Parse(cmd.ExecuteScalar().ToString());
无论cmd的值是多少。CommandText是在这一点上(我不能告诉,因为你还没有包括这一行以上的代码)最有可能有一个t-sql语法错误类似于一个进一步在你的代码,我在下面调用:
尝试在表名后添加一个空格:
sSql = "select * from P_MKZGood ";
在当前代码中,如果flag被设置为true,那么您将创建以下t-sql命令文本:
select * from P_MKZGoodwhere isrecommend = 1
注意P_MKZGood和之间没有空格,其中。这是导致抛出SqlException的语法冲突。
@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";
根据你之前和这个问题,我认为你需要下面的方法。正如其他人提到的,在编码中有许多错误和地方可以改进。检查下面的代码
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())
当你使用sql语句时,一定要记得在连接前加空格。 - 你可以用一次性对象使用
using
块,你不需要通过代码关闭连接等。 - 当您从读取器获得值时,这些值可以为空。添加适当的验证来处理空值。
在你的语句中,代码的字符串
sSql = "select * from P_MKZGood"
if (flag == true)
{
sSql += "where IsCommend = 1";
}
这里的最后一个字符串是:select * from P_MKZGoodwhere isrecommend = 1"
会出现错误" error syntax incorrect near = "
您需要像这样指定"P_MKZGood"之前或之后的空格
sSql = "select * from P_MKZGood "
或
sSql += " where Iscommend = 1"
那么最后的字符串将是:select * from P_MKZGood where isrecommend = 1"
No Error is here