Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IDataReader未读取,无错误_C#_Asp.net_Sqldatareader_Idatareader - Fatal编程技术网

C# IDataReader未读取,无错误

C# IDataReader未读取,无错误,c#,asp.net,sqldatareader,idatareader,C#,Asp.net,Sqldatareader,Idatareader,我意识到IDataReader已经过时,有些人认为它是肮脏的代码,但在我正在开发的网站上,这正是他们所使用的。我有一个IDataReader语句来运行查询,以使用多个联接从表中获取特定id。现在这个站点有一个DAL,但它只支持一次从一个表中进行选择,所以将select语句与联接一起使用是不起作用的。这就是为什么我不得不使用IDataReader来处理这个问题 if (Request.QueryString["CategoryId"].ToString() == "0")

我意识到IDataReader已经过时,有些人认为它是肮脏的代码,但在我正在开发的网站上,这正是他们所使用的。我有一个IDataReader语句来运行查询,以使用多个联接从表中获取特定id。现在这个站点有一个DAL,但它只支持一次从一个表中进行选择,所以将select语句与联接一起使用是不起作用的。这就是为什么我不得不使用IDataReader来处理这个问题

 if (Request.QueryString["CategoryId"].ToString() == "0")
                {
                    using (IDataReader getCategoryID = DB.GetRS("SELECT ItemCatalogCategory.CategoryID FROM UserCustomerCatalog INNER JOIN ItemCatalogCategory ON UserCustomerCatalog.ItemProfileCatalogID = ItemCatalogCategory.ItemProfileCatalogID " +
                              "INNER JOIN ItemCategory ON ItemCatalogCategory.CategoryID = ItemCategory.CategoryID INNER JOIN StoreCatalog ON UserCustomerCatalog.StoreCatalogID = StoreCatalog.StoreCatalogID " +
                              "WHERE UserCustomerCatalog.ItemProfileCatalogID = '" + Request.QueryString["CatalogID"] + "' AND UserCustomerCatalog.CustomerID =' " + Session["Customer"].ToString() + "' AND ItemCategory.ProductID = '" + productis + "'"))
                    {

                        if (getCategoryID.Read())
                        {
                            string categoryID = getCategoryID["ItemCatalogCategory.CategoryID"].ToString();

                            string lookmike = Request.Url.AbsolutePath + "?CatalogID=" + catalogis + "&ProductID=" + productis + "&CatalogIndex=" + Request.QueryString["CatalogIndex"] + "&CategoryID=" + categoryID;
                            Response.Redirect(Request.Url.AbsolutePath + "?CatalogID=" + catalogis + "&ProductID=" + productis + "&CatalogIndex=" + Request.QueryString["CatalogIndex"] + "&CategoryID=" + categoryID);

                        }
                        else
                        {
                            Response.Redirect(Request.Url.AbsolutePath + "?CatalogID=" + catalogis + "&ProductID=" + productis + "&CatalogIndex=" + Request.QueryString["CatalogIndex"] + "&CategoryID=" + Request.QueryString["CategoryId"]);
                        }

                    }//end using getCategoryID
                }
这就是我所拥有的,但当它变成:

if (getCategoryID.Read())
它呈现为false,没有抛出异常,也没有错误或警告。我以前做过这种类型的选择,没有遇到任何问题,但我不明白.Read()返回false的原因


有人能提出不阅读的可能原因吗?如果需要更多的代码,我可以根据需要提供。非常感谢您的帮助,请提前感谢。

查看您的SQL文本时,有一点输入错误可能会对结果造成严重破坏

 "WHERE UserCustomerCatalog.ItemProfileCatalogID = '" + Request.QueryString["CatalogID"] + 
 "' AND UserCustomerCatalog.CustomerID =' " + Session["Customer"].ToString() + "' AND ..... "
                                    here ^
该空间会破坏您的查询,并且不会给出任何结果

我还要重申,正如其他成员已经说过的那样,你在这方面有问题。您可以向getr的实际实现中添加重载,该getr还接收要添加到用于构建SqlDataReader的命令中的SQLParameter集合。像这样的

public SqlDataReader GetRS(string sqlText, SqlParameter[] prm)
{
      ....
      SqlCommand cmd = new SqlCommand(sqlText, conn);
      cmd.Parameters.AddRange(prm);
      .....
}

然后开始更新调用代码。

查看SQL文本时,有一点输入错误可能会对结果造成严重破坏

 "WHERE UserCustomerCatalog.ItemProfileCatalogID = '" + Request.QueryString["CatalogID"] + 
 "' AND UserCustomerCatalog.CustomerID =' " + Session["Customer"].ToString() + "' AND ..... "
                                    here ^
该空间会破坏您的查询,并且不会给出任何结果

我还要重申,正如其他成员已经说过的那样,你在这方面有问题。您可以向getr的实际实现中添加重载,该getr还接收要添加到用于构建SqlDataReader的命令中的SQLParameter集合。像这样的

public SqlDataReader GetRS(string sqlText, SqlParameter[] prm)
{
      ....
      SqlCommand cmd = new SqlCommand(sqlText, conn);
      cmd.Parameters.AddRange(prm);
      .....
}

然后开始更新调用代码。

是否真的没有结果?当您针对正在使用的任何数据库系统运行正在创建的SQL查询时,会返回多少结果?“我意识到IDataReader已经过时,有些人认为它是脏代码”一点也不。。。可能是DataTable,但数据读取器很好。就我个人而言,我会把它藏起来一点(不在UI的旁边),但是,你有一些巨大的SQL注入漏洞。非常不安全的代码。(仍在寻找…)我建议DAL代码维护人员,他们的代码强制存在SQL注入攻击的漏洞。此处->
'“+会话[“客户”]。ToString()+”
有一个空间会打断您的查询。这是打字错误吗?有可能真的没有结果吗?当您针对正在使用的任何数据库系统运行正在创建的SQL查询时,会返回多少结果?“我意识到IDataReader已经过时,有些人认为它是脏代码”一点也不。。。可能是DataTable,但数据读取器很好。就我个人而言,我会把它藏起来一点(不在UI的旁边),但是,你有一些巨大的SQL注入漏洞。非常不安全的代码。(仍在寻找…)我建议DAL代码维护人员,他们的代码强制存在SQL注入攻击的漏洞。此处->
'“+会话[“客户”]。ToString()+”
有一个空间会打断您的查询。这是一个输入错误吗?感谢您的回答和建议,以帮助避免SQL注入,我将尝试实现一个参数结构,用于这个和未来类似的编码。再次感谢你的帮助,我真的很感激。很高兴能帮上忙。当我们在这里的时候,让我们停顿一下,微笑一下。感谢您的回答和建议,以帮助避免SQL注入,我将尝试实现一个参数结构,用于本次和未来类似的编码。再次感谢你的帮助,我真的很感激。很高兴能帮上忙。当我们在这里的时候,让我们停顿一下,微笑一下。