读书人

ASP.NET通过SqlCommand、SqlDataReade

发布时间: 2012-06-02 14:16:14 作者: rapoo

ASP.NET通过SqlCommand、SqlDataReader 读取数据库问题

C# code
using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class admin_zpxg : System.Web.UI.Page{    SqlConnection con;    string sqlcon = ConfigurationManager.ConnectionStrings["rjs_admin"].ConnectionString;    private static int productID;    protected void Page_Load(object sender, EventArgs e)    {        if (!IsPostBack)        {            productID = Convert.ToInt32(Request.QueryString["prodID"]);            contentdatabind();        }    }    protected void contentdatabind()    {        con = new SqlConnection(sqlcon);        con.Open();        string strsql = "select * from [Product] where prodID='" + productID + "'";        SqlCommand cmd = new SqlCommand(strsql,con);        SqlDataReader dr = cmd.ExecuteReader();        if (dr.Read())        {            //this.txtname.Text = dr["prodName"].ToString();            //this.ddlgroup.Text = dr["groupName"].ToString();            //this.txtimgpath.Text = dr["prodImages"].ToString();            //this.prodauthor.Text = dr["prodAuthor"].ToString();            //this.prodintroduce.Text = dr["prodIntroduce"].ToString();            this.txtname.Text = "哈哈";            //我测试了下,确定是Read没有读取,把上面的注释去掉的话会报错、说是没有读取到。。。        }        else        {            this.txtname.Text = "啊啊啊啊";        }        con.Close();    }}


[解决办法]
string strsql = "select * from [Product] where prodID='" + productID + "'";

这里加断点,然后看strsql值是什么?
[解决办法]
逐步排查下把 。
[解决办法]
C# code
 con = new SqlConnection(sqlcon);        con.Open();        string strsql = "select * from [Product] where prodID='" + productID + "'";         SqlDataAdapter sda = new SqlDataAdapter(strsql,con );           DataSet ds=new  DataSet();         sda.fill(ds);           if (ds.table[0].rows.count>0)        {                       this.txtname.Text = ds.table[0].rows[0]["prodName"].TOString();           }        else        {            this.txtname.Text = "啊啊啊啊";        }        con.Close();
[解决办法]
探讨

引用:
string strsql = "select * from [Product] where prodID='" + productID + "'";

这里加断点,然后看strsql值是什么?

我以前也遇到过这个情况,但是用try catch能行就没管,这次是要发誓解开心里的疙瘩啊啊啊~`

[解决办法]
打端点调试吧。。。一步一步看
[解决办法]
因为存在null值,所以读不出来,是先判断一下是否为null
标准的做法

C# code
        string strsql = "select prodName,groupName,prodImages,prodAuthor,prodIntroduce from [Product] where prodID='1'";        SqlCommand cmd = new SqlCommand(strsql,con);        using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))        {            if (dr.Read())            {                this.txtname.Text = dr.IsDBNull(0) ? string.Empty : dr.GetString(0);                this.ddlgroup.Text = dr.IsDBNull(1) ? string.Empty : dr.GetString(1);                this.txtimgpath.Text = dr.IsDBNull(2) ? string.Empty : dr.GetString(2);                this.prodauthor.Text = dr.IsDBNull(3) ? string.Empty : dr.GetString(3);                this.prodintroduce.Text = dr.IsDBNull(4) ? string.Empty : dr.GetString(4);            }        } 


[解决办法]

C# code
protected void contentdatabind()    {        con = new SqlConnection(sqlcon);        con.Open();        string strsql = "select * from [Product] where prodID='" + productID + "'";        SqlCommand cmd = new SqlCommand(strsql,con);        SqlDataReader dr = cmd.ExecuteReader();if (dr.HasRows){ //加个判断,调试看看是否SqlDataReader 有数据,我觉得,你的SQL语句根本没有查询出来数据       if (dr.Read())        {            this.txtname.Text = "哈哈";                    }        else        {            this.txtname.Text = dr["prodName"].ToString();            this.ddlgroup.Text = dr["groupName"].ToString();            this.txtimgpath.Text = dr["prodImages"].ToString();            this.prodauthor.Text = dr["prodAuthor"].ToString();            this.prodintroduce.Text = dr["prodIntroduce"].ToString();            //我把这段挪到了ELSE里面,报错说:在没有任何数据时进行无效的读取尝试。        }        con.Close();    }}
[解决办法]
1、你查得那张表有数据吗,没有数据的话,当然读不出来了。
2. string strsql = "select * from [Product] where prodID='" + productID + "'";
productID 在哪里赋值得。
[解决办法]
探讨
引用:
也把具体的错误信息贴出来看下

他是跟本就没执行IF里面的语句。
所以我把代码改了下,报错了。

C# code

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
……

[解决办法]
第一:

productID 为什么不保存在 ViewState["productID"]里? 静态那里有点问题?


第二:

dr.Read()了。

dr.Close()呢?
[解决办法]
把SQL语句打印出来拿到SQL Server里面执行以下不就知道结果了
[解决办法]
http://localhost:1730/RJS/admin/zpxg.aspx?prodID=11
是这样?“=”是少加了还是啥?
[解决办法]
先不要带参数 看看 有没有问题,然后缩小范围
string strsql = "select * from [Product] where prodID='11'";

[解决办法]
探讨
先不要带参数 看看 有没有问题,然后缩小范围
string strsql = "select * from [Product] where prodID='11'";

[解决办法]
探讨

因为存在null值,所以读不出来,是先判断一下是否为null
标准的做法

C# code

string strsql = "select prodName,groupName,prodImages,prodAuthor,prodIntroduce from [Product] where prodID='1'";
SqlCommand cmd = ne……

读书人网 >asp.net

热点推荐