C#调用SQL数据问题

edwardcsdn 2010-06-22 04:13:28
我使用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;
服务器我也检查过,除了负载量过大外,其他的没有什么问题。如果是负载量的问题为什么多数时候不会出现问题。
求大侠帮忙了!
...全文
140 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
醒子宇 2010-06-23
  • 打赏
  • 举报
回复
这样的问题很烦人``
SongQues 2010-06-23
  • 打赏
  • 举报
回复
这问题调试一下不就OK了么!
edwardcsdn 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kevin_cheung 的回复:]

设置个断点很容易就能找到问题
可以把生成的SQL放进查询分析器去执行 少数据肯定是SQL问题 不会到了DATATABLE中还少的

要是没耐心 可以程序发给我 我帮你看
[/Quote]

谢谢。不过不是我没耐心。我设置断点,按照不同组合方式的搜索条件查询,都没有出现问题。而且这个问题不是一个普遍问题,只有在个别的客户端会出现这个问题。
army369168520 2010-06-22
  • 打赏
  • 举报
回复
LZ的命名不太好
有的命名跟系统默认的,有的情况下会出现冲突,有的时候会隐藏,建议LZ先
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 ";

LZ贴的代码太多了…
ledmhcc 2010-06-22
  • 打赏
  • 举报
回复
出现频率高吗?高的话只能连在客户那蹲点一段时间了
你写一个筛选的sql,放进程序里,就是说datatable生成的SQL你在程序里执行下,记录行数,再记下筛选后的table的count。都写进日志。那样出现问题时,可能能看出点什么东西
LovingAlison 2010-06-22
  • 打赏
  • 举报
回复
cosco.cheung@hotmail.com
LovingAlison 2010-06-22
  • 打赏
  • 举报
回复
设置个断点很容易就能找到问题
可以把生成的SQL放进查询分析器去执行 少数据肯定是SQL问题 不会到了DATATABLE中还少的

要是没耐心 可以程序发给我 我帮你看
edwardcsdn 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ledmhcc 的回复:]
断点进去,看下哪次的datatable筛选后数据缺少了。我觉得那个是应该有规律的。比如几个条件联动,或是哪几张特定表
[/Quote]

我按照出现问题的筛选条件做断点测试,可是没有出现问题。我也记录过操作日志,把客户端的操作拿到企业管理器里执行,数据一点都不缺少。也正因如此,所以有点无从下手。不知道应该从哪里查起了。
ledmhcc 2010-06-22
  • 打赏
  • 举报
回复
断点进去,看下哪次的datatable筛选后数据缺少了。我觉得那个是应该有规律的。比如几个条件联动,或是哪几张特定表
edwardcsdn 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ledmhcc 的回复:]
那一般是筛选时条件写的不对,或datatable拿出来的数据和你想要的格式有差别。遭成数据缺少
[/Quote]

我对每次操作记录了一个日志。把对应的SQL语句选出来后,在企业管理器里执行数据就没有出现丢失。
ledmhcc 2010-06-22
  • 打赏
  • 举报
回复
那一般是筛选时条件写的不对,或datatable拿出来的数据和你想要的格式有差别。遭成数据缺少
edwardcsdn 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ledmhcc 的回复:]
数据服务器连接压力不大的话不要放到datatable里去筛选,用SQL去数据库提取看得比较清楚
你会不会是在程序里用了已筛选了的datatable又去做下一次筛选了?
[/Quote]

存储筛选数据的DataTable是一个全局变量。每次操作不会改变其中的值,只是创建出新的DataTable绑定到GridView。
ledmhcc 2010-06-22
  • 打赏
  • 举报
回复
数据服务器连接压力不大的话不要放到datatable里去筛选,用SQL去数据库提取看得比较清楚
你会不会是在程序里用了已筛选了的datatable又去做下一次筛选了?
zhubo006 2010-06-22
  • 打赏
  • 举报
回复
到 asp .net区去提问
ggxboy 2010-06-22
  • 打赏
  • 举报
回复
学习 AND同上
宇峰科技 2010-06-22
  • 打赏
  • 举报
回复
偶地个神啊,最好把问题简单化,没心思看了

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧