我是新的程序员。在我的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。但我不知道这种方式是正确与否。
我想大多数人都理解我的问题?
提前致谢....
答案 0 :(得分:3)
如何将代码划分为层次更多的是品味而非绝对必须。通过至少将数据库代码与用户界面分离,您可以获得一些优势。例如,如果数据库代码与UI分离,您可以轻松地注意到直接在数据库查询中使用文本框中的文本的问题。
您的代码存在一些严重问题:
此外:
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)
您的命令可以改为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));
使用或try / finally关闭连接,只要完成连接,并为datareader执行此操作,所以:
using (MySqlConnection connection = new MySqlConnection(MyConString))
{
//use the connection here
}
通常使用using
语句和所有实现IDisposable
接口的对象,因此它们可能会被处理掉。当你使用try/finally
或using
时,你确信即使出现了错误,例如抛出了异常,你的对象也会被处理掉。
您应该将数据库逻辑与UI分开。检查3 tier architecture e。
答案 2 :(得分:1)
要确保始终关闭连接,请打开使用块内部的连接。如下面的代码片段所示。这样做可确保在代码退出块时自动关闭连接。
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// Do work here; connection closed on following line.
}
这是连接池的一部分。这是进行Sql连接的好方法之一。