我是 sql 新手。没有得到查询结果。运行良好,没有错误
Posted
技术标签:
【中文标题】我是 sql 新手。没有得到查询结果。运行良好,没有错误【英文标题】:i am new to sql .Not Getting query result . Runs fine with no error 【发布时间】:2016-08-28 18:26:03 【问题描述】:private void button1_Click(object sender, EventArgs e)
DataTable DataTab = new DataTable();
DaSql = new SqlDataAdapter("SELECT * FROM Student where Gender = '" + textBox1.Text + "' ", conSql);
DaSql.Fill(DataTab);
DataGridQueryResult.DataSource = DataTab;
【问题讨论】:
请描述您尝试过的内容和方法。 代码易受SQL INJECTION的影响 更改查询以处理parameters
您正在使自己受到所谓的SQL Injection
同样当您使用调试器单步执行代码时,DataTab
的值是表充满数据还是为空..?这也是winforms or webforms
应用程序,如果它是winforms 并且数据未显示,请在分配数据源后尝试调用DataGridQueryResult.Refresh()
conSql 在哪里赋值?
【参考方案1】:
在您的代码运行之前,不要过多关注 SQL INJECTION。让它工作,然后保护它。尝试将变量设置为
var sqlText = "SELECT * FROM Student where Gender = '" + textBox1.Text + "' ";
然后在调试器中点击它以检查您的完整查询语句。确保你没有任何愚蠢的东西,比如额外的空间。
See a full example of filling a data table here
使用parameters修复您的 SQL INJECTION 漏洞
【讨论】:
如果你从一开始就没有正确编码,你建议什么时候有时间修复它?参数化查询是如此简单,一开始不这样做是疏忽的。 如果 SQL 对您来说是新手,那么第一次使用它就不是那么简单了。获得一段工作代码是一个很大的提升。保护它是合乎逻辑的一步,这是我要提出的观点。 恕我不同意。我们经常看到人们学习这种语言,他们总是有修复它的意图,但实际上并没有学会如何去做,此外,“它有效”。它滋生了“如果它没有坏就不要修复它”的心态,这会导致非常糟糕的事情。当然,让一些代码工作会有所帮助,但首先教一个人正确地做会更好。【参考方案2】:Query 没有错误似乎与 DataGrid 有绑定问题。 我的情况是一样的,我使用 SQL、DataTable、DataGrid。 你会试试这个吗?
DataTable DataTab = new DataTable("Student");
DaSql = new SqlDataAdapter("SELECT * FROM Student where Gender = '" + textBox1.Text + "' ", conSql);
DaSql.Fill(DataTab);
DataGridQueryResult.ItemsSource = DataTab.DefaultView;
并且需要检查窗口设计器中的 DataGrid 设置是否正确,包括 AutoGeneratingColumns=True。 我总是使用 ItemsSource,效果很好。
【讨论】:
以上是关于我是 sql 新手。没有得到查询结果。运行良好,没有错误的主要内容,如果未能解决你的问题,请参考以下文章