是正确的方式吗?

时间:2011-07-30 10:53:10

标签: c# winforms

我是新的程序员。在我的Comp。我是唯一的程序员。所以我脑子里有很多问题。

在我的项目中我正在使用以下代码添加。

MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
MySqlDataReader Reader;
command.CommandText = "select * from " + datatable + " where code='" + textBox1.Text + "'";
connection.Open();
Reader = command.ExecuteReader();
while (Reader.Read())
{
    already = 1;
}
connection.Close();

这是正确的方法。或者DAL,存储过程,3轮胎Architure哪个是最有效的。公司的标准守则是什么。

我正在做Project和Got Solutions。但我不知道这种方式是正确与否。

我想大多数人都理解我的问题?

提前致谢....

3 个答案:

答案 0 :(得分:3)

如何将代码划分为层次更多的是品味而非绝对必须。通过至少将数据库代码与用户界面分离,您可以获得一些优势。例如,如果数据库代码与UI分离,您​​可以轻松地注意到直接在数据库查询中使用文本框中的文本的问题。

您的代码存在一些严重问题:

  • 您没有处理所有浪费资源的一次性物品,从长远来看可能会导致错误。
  • 对于SQL注入,代码是敞开的,您应该使用参数化查询。

此外:

  • 当您只需要知道是否有任何数据时,您将获取表格中的所有数据。
  • 永远不要使用select *,只获取您要使用的字段。

处理连接和读取器aldo关闭它们,因此如果使用using块来处置对象,则不必先关闭它们:

using (MySqlConnection connection = new MySqlConnection(MyConString)) {
  using (MySqlCommand command = connection.CreateCommand()) {
    command.CommandText = "select count(*) from " + datatable + " where code = @Code";
    command.Parameters.Add("@Code", dbType.VarChar, 50).Value = textBox1.Text;
    connection.Open();
    if ((int)(command.ExecuteScalar()) > 0) {
      already = 1;
    }
  }
}

答案 1 :(得分:2)

  1. 将您的连接字符串保持在全局范围内,因此如果它发生更改,则不必在每个与数据库交互的方法中重新写入它。
  2. 您的命令可以改为SQL injection attack,您应该将其更改为:

    command.CommandText = "select * from @datatable where code=@code";
    command.Parameters.Add(new SqlParameter("datatable", datatable));
    command.Parameters.Add(new SqlParameter("code", textBox1.Text));
    
  3. 使用或try / finally关闭连接,只要完成连接,并为datareader执行此操作,所以:

    using (MySqlConnection connection = new MySqlConnection(MyConString))
    {
        //use the connection here
    }
    

    通常使用using语句和所有实现IDisposable接口的对象,因此它们可能会被处理掉。当你使用try/finallyusing时,你确信即使出现了错误,例如抛出了异常,你的对象也会被处理掉。

  4. 您应该将数据库逻辑与UI分开。检查3 tier architecture e。

  5. 的模式

答案 2 :(得分:1)

要确保始终关闭连接,请打开使用块内部的连接。如下面的代码片段所示。这样做可确保在代码退出块时自动关闭连接。

using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        // Do work here; connection closed on following line.
    }

这是连接池的一部分。这是进行Sql连接的好方法之一。