C#调用SQL数据问题
我使用C#做的开发。通过用户在界面选择需要的选择条件后,在后台调用Sql语句从数据库中取值。取值后将数据存储到一个DataTable中。然后通过GridView绑定DataTable显示出筛选结果。但是现在有个问题,在筛选数据的时候有事会出现数据丢失的问题。有时候60条会丢1-8条不等。但这个现象不是每次都出现。筛选数据代码如下:
string strSql = "SELECT ID,Info,IDNum,Name,Class,LogTime,Statu,CASE datalength(Remark) WHEN 0 THEN '' ELSE 'Attention' END AS RM,CASE Statu WHEN '1' THEN '未注册' WHEN '2' THEN '已注册' WHEN '3' THEN '锁定' WHEN '4' THEN '注销' END AS TS FROM STClass where 1=1 ";
if (txtID.Text.ToString().Trim() != "")
{strSql += " and ID='" + txtID.Text.ToString().Trim() + "'";}
if (DDLIC.SelectedItem.Text.ToString().Trim() != "请选择")
{strSql += " and Info='" + DDLIC.SelectedValue.ToString().Trim() + "'";}
......
if (ckTime.Checked == true)
{strSql += " and ETime between '" + txtSD.Text.ToString().Trim() + " 00:00:00' and '" + txtED.Text.ToString().Trim() + " 23:59:59'";}
else
{strSql += " and FTime between '" + txtSD.Text.ToString().Trim() + " 00:00:00' and '" + txtED.Text.ToString().Trim() + " 23:59:59'";}
strSql += " ORDER BY TStatu,FTime desc";
SqlConnection VBConn = new SqlConnection(strDBConn);
Tool1 SCHTool = new Tool1();
DispDT = SCHTool.CreatDT(strSql, "DispDT", DBConn);
CreatDT函数如下:
SqlCommand DTCmd;
SqlDataAdapter Adp = new SqlDataAdapter();
DataTable TempDT = new DataTable();
if (DBConn == null)
{return TempDT;}
if (strSql.Length == 0)
{return TempDT;}
DTCmd = new SqlCommand(strSql, DBConn);
Adp.SelectCommand = DTCmd;
Adp.Fill(TempDT);
TempDT.TableName = strTableName;
return TempDT;
因为需要分页显示,所以自己做了一个通过操作DataTable的数据实现分页。这个也检查过,没有发现丢失问题。具体分页代码如下:
//下一页
DataTable PagingDT = new DataTable();
if (Psr_Page_Num == DTTotal(20,DispDT) )
{PagingDT = SelectDR(Psr_Page_Num, 20, DispDT);}
else
{PagingDT = SelectDR(++Psr_Page_Num, 20, DispDT);}
gridviewList.DataSource = PagingDT;
gridviewList.DataBind();
//SelectDR函数如下
DataTable ReturnDataTable = new DataTable();
ReturnDataTable = TempDT.Clone();
int Counti = (PageNum - 1) * PsrPageSize;
for (int i = 0; i < PsrPageSize && (Counti + 1) <= TempDT.Rows.Count; i++)
{ReturnDataTable.ImportRow(TempDT.Rows[Counti++]);}
return ReturnDataTable;
//DTTotal函数如下
//Psr_PageSize:页面大小;TempDT:数据DataTable
int TotalRows = TempDT.Rows.Count;
int Remainder = TempDT.Rows.Count % Psr_PageSize;
TotalRows = TotalRows / Psr_PageSize;
if (Remainder > 0)
{TotalRows++;}
return TotalRows;
服务器我也检查过,除了负载量过大外,其他的没有什么问题。如果是负载量的问题为什么多数时候不会出现问题。
求大侠帮忙了!