当前位置:编程学习 > C#/ASP.NET >>

数据绑定问题

我定义了一个方法BindSub() :用于绑定选择试卷名称后绑定相应试卷的试题;
        private void BindSub() 
        {
            string s = "select testid from test where tname=@name";
            SqlParameter[] sp = { new SqlParameter("@name",cb_papertype.Text)};
            TestId =SQLHelper.ExeSql(s,CommandType.Text,sp).ToString();

            StringBuilder sb = new StringBuilder("select subid,subname as 题目 ,answer 正确答案 from subject");
            sb.Append(" where testid =@id");
            SqlParameter[] sps = { new SqlParameter("@id", TestId) };
            sda = SQLHelper.GetSda(sb.ToString(), CommandType.Text, sps);
            dt = new DataTable();
            sda.Fill(dt);
            dgv_test.DataSource = dt;
            dgv_test.Columns[0].Visible = false;//隐藏subid
        }
    cb_papertype.Text是指ComboBox控件中选择的试卷名称,通过名称tname查询TestId,然后,通过获取的ID讲对应试卷的题目和答案绑定到
DateGridView控件dgv_test中。但是程序执行后,返回TestId查询的结果是“-1”也就说没有查到。但是,我在SQL server Management中完全能查询到,这是怎么回事?

 

看上面图片能查到,但是下面的SUBID却是空的:
--------------------编程问答-------------------- 图片看不到 --------------------编程问答-------------------- ExeSql()方法是怎么写的

单步调试走进行看看 --------------------编程问答--------------------
引用 1 楼 ajq1989 的回复:
图片看不到

两个图片就是用SQL server Management查询的结果,跟程序调试是时候绑定的结果~ --------------------编程问答--------------------
引用 2 楼 q107770540 的回复:
ExeSql()方法是怎么写的

单步调试走进行看看

SqlHelper类如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace HiTeamExam
{
    class SQLHelper
    {
        //编写配置文件中连接数据库的配置信息
        //读取配置文件中数据库的连接信息
        static string connstr = ConfigurationSettings.AppSettings["conn"];
        public static SqlConnection conn = new SqlConnection();
        //打开数据连接
        public static void OpenConn()
        {
            try
            {
                conn.ConnectionString = connstr;
                conn.Open();
            }
            catch (Exception)
            {
                throw;
            }
        }
        //得到SqlCommand对象
        public static SqlCommand GetComm(string sql, CommandType ct, SqlParameter[] sps)
        {
            OpenConn();
            SqlCommand comm = new SqlCommand(sql, conn);
            comm.CommandType = ct;
            if (sps != null)
                comm.Parameters.AddRange(sps);
            return comm;
        }
        //调用得到SqlCommand对象的方法,执行ExecuteScalar方法,得到第一行第一列的值,并返回
        public static object ExeSca(string sql, CommandType ct, SqlParameter[] sps)
        {
            SqlCommand comm = GetComm(sql, ct, sps);
            object ob = comm.ExecuteScalar();
            conn.Close();
            return ob;
        }
        //调用执行ExecuteNonQuery的方法,返回受影响的行
        public static int ExeSql(string sql, CommandType ct, SqlParameter[] sps)
        {
            SqlCommand comm = GetComm(sql, ct, sps);
            int row = comm.ExecuteNonQuery();
            conn.Close();
            return row;
        }
        //执行ExecuteReader方法,返回SqlDataReader对象
        public static SqlDataReader GetReader(string sql, CommandType ct, SqlParameter[] sps)
        {
            SqlCommand comm = GetComm(sql, ct, sps);
            SqlDataReader sdr = comm.ExecuteReader(CommandBehavior.CloseConnection);
            return sdr;
        }
        //得到SqlDataAdapter对象
        public static SqlDataAdapter GetSda(string sql, CommandType ct, SqlParameter[] sps)
        {
            SqlCommand comm = GetComm(sql, ct, sps);
            SqlDataAdapter sda = new SqlDataAdapter(comm);
            SqlCommandBuilder scb = new SqlCommandBuilder(sda);
            conn.Close();
            return sda;
        }
        //调用得到SqlDataAdapter对象的方法,得到DataSet对象
        public static DataSet GetDS(string sql, CommandType ct, SqlParameter[] sps)
        {
            SqlDataAdapter sda = GetSda(sql, ct, sps);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            return ds;
        }
        //调用得到DataSet对象的方法,得到DataTable对象
        public static DataTable GetDT(string sql, CommandType ct, SqlParameter[] sps)
        {
            DataSet ds = GetDS(sql, ct, sps);
            return ds.Tables[0];
        }
        //调用得到DataTable的方法,得到DataView对象 filter:指定要查询的条件 order:指定要排序的列和排序规则
        public static DataView GetDV(string sql, CommandType ct, SqlParameter[] sps, string filter, string order)
        {
            DataTable dt = GetDT(sql, ct, sps);
            DataView dv = new DataView(dt, filter, order, DataViewRowState.CurrentRows);
            return dv;
        }
    }
}
单步调试的结果就是TestId 从null变为-1. --------------------编程问答-------------------- 我怎么看了半天 大概你的sql语句写的不对  还有条件啊 --------------------编程问答--------------------
引用楼主 kuerjinjin 的回复:
我定义了一个方法BindSub() :用于绑定选择试卷名称后绑定相应试卷的试题;
  private void BindSub() 
  {
  string s = "select testid from test where tname=@name";
  SqlParameter[] sp = { new SqlParameter("@name",cb_papertype.Text)……



你的数据库里有没有数据啊?
answer 后面少了一个as --------------------编程问答-------------------- 用事件查看器,看下你的页面执行的最终效果。如果是对的,那就是你的绑定写的有问题,你的自动绑定吗?
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,