【问题标题】:MS Access to sql server searchingMS Access 到 sql server 搜索
【发布时间】:2010-03-22 16:37:20
【问题描述】:

如果我们要使用 sql server 数据库,如何使用这段代码,因为在这段代码中我们使用 MS Access 作为数据库

private void btnSearch_Click(object sender, System.EventArgs e) {
  String pcode = txtPcode.Text;
  int ctr = productsDS1.Tables[0].Rows.Count;
  int x;
  bool found = false;

  for (x = 0; x<ctr; x++) {
    if (productsDS1.Tables[0].Rows[x][0].ToString() == pcode) {
      found = true;
      break;
    }
  }

  if (found == true) {
    txtPcode.Text = productsDS1.Tables[0].Rows[x][0].ToString();
    txtDesc.Text = productsDS1.Tables[0].Rows[x][1].ToString();
    txtPrice.Text = productsDS1.Tables[0].Rows[x][2].ToString();
  } else {
    MessageBox.Show("Record Not Found");
  }

  private void btnNew_Click(object sender, System.EventArgs e) {
    int cnt = productsDS1.Tables[0].Rows.Count;
    string lastrec = productsDS1.Tables[0].Rows[cnt][0].ToString();
    int newpcode = int.Parse(lastrec) + 1;

    txtPcode.Text = newpcode.ToString();
    txtDesc.Clear();
    txtPrice.Clear();
    txtDesc.Focus();

这是连接字符串

Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=0;Data Source="J:\2009-2010\1st sem\VC#\Sample\WindowsApplication_Products\ PointOfSales.mdb"

【问题讨论】:

  • 建议:将缺少的部分代码添加并格式化。显示您当前如何连接到 Access。告诉我们您的尝试。
  • 我没有看到你在这段代码中使用 Access 的地方。
  • Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:注册表路径=;Jet OLEDB:数据库锁定模式=0;Data Source="J:\2009-2010\1st sem\VC# \Sample\WindowsApplication_Products\PointOfSales.mdb"
  • 访问sql server,修改你的连接字符串:connectionstrings.com

标签: c# sql-server


【解决方案1】:

在服务器上实现这样的代码完全是滥用 SQL Server。我的 C# 有点生疏,但看起来这段代码遍历了 productsDS1 中的每一行,将“Pcode”、“Desc”和“Price”与输入到文本框中的内容进行比较。

实现这一点的正确方法是通过 SQL Server 上的存储过程,该过程传递这三个值并返回匹配记录的记录集(或者可能是在单独的检索过程中使用的 RecordID)或者至少形成一个 SQL 语句来检索数据(即"SELECT * FROM productsDS1 where Pcode = '" &amp; txtPcode.Text &amp; "' AND Desc = '" &amp; txtDesc.Text &amp; "' AND Price = " &amp; txtPrice.Text)。我会推荐第一种方法,因为第二种方法容易受到 SQL 注入的影响。

(这种方法也更适合 Access db。)

【讨论】:

  • @data jockey:我已经格式化了你的答案以使其更具可读性 - 希望你不介意:)
  • +1 但是,您不需要使用存储过程来保护自己免受 SQL 注入。参数化查询/准备好的语句应该可以很好地解决问题。
猜你喜欢
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多