数据绑定问题
我定义了一个方法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()方法是怎么写的
单步调试走进行看看 --------------------编程问答--------------------
两个图片就是用SQL server Management查询的结果,跟程序调试是时候绑定的结果~ --------------------编程问答--------------------
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语句写的不对 还有条件啊 --------------------编程问答--------------------
你的数据库里有没有数据啊?
answer 后面少了一个as --------------------编程问答-------------------- 用事件查看器,看下你的页面执行的最终效果。如果是对的,那就是你的绑定写的有问题,你的自动绑定吗?
补充:.NET技术 , .NET Framework