我是 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 新手。没有得到查询结果。运行良好,没有错误的主要内容,如果未能解决你的问题,请参考以下文章

导出 Hive 查询结果

SQL 伪查询

如何在 Laravel 6 中转换原始 sql 查询?

需要优化SQL查询的帮助

SQL:查询以显示每个属性有多少用户(分组)

sql统计连续相同数值的次数