【问题标题】:i am new to sql .Not Getting query result . Runs fine with no error我是 sql 新手。没有得到查询结果。运行良好,没有错误
【发布时间】: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 在哪里赋值?

标签: c# mysql sql sql-server


【解决方案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,效果很好。

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2015-08-13
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多