操作数据库主要是用sql语句进行操作.在.NET里执行SQL语句有三种方法. 第一种:拼SQL语句 第二种:参数化SQL语句 第三种:用存储过程 下下是例子 第一种: string sql = "select * from user where user ="+ userName "; 第二种: string sql = "select * from user where user = @username "; SqlConnection myConnection = new SqlConnection(connStr); SqlCommand myCommand = new SqlCommand(sql, myConnection); myCommand.Parameters.Add(new SqlParameter("@username",SqlDbType.VarChar,50)); myCommand.Parameters["@username"].Value = userName;
没有最好 只有更好
不同的项目、不同的架构也不相同
通常的做法是
1、通过ORM组件、结合SQL、SP、VIEW来实现
2、完全SQL、SP、VIEW来实现, APP端执行即可(尤其是在大型项目开发设计中)
3、动态的拼合SQL(尽量避免)保持各层清晰为最佳
sql一般写在数据层 一般有增删改查四个方法然后再业务层调用数据层的方法 然后在代码隐藏文件(.cs)里调用业务层的方法执行操作 代码隐藏文件里不要出现sql语句 它只传递参数
你开发的时候没有分层的概念吗
表现层,逻辑层,数据层
winform和webform都是适用的啊
有些可以利用反射,SQL代码写在配置文件中
第一种:拼SQL语句
第二种:参数化SQL语句
第三种:用存储过程
下下是例子
第一种:
string sql = "select * from user where user ="+ userName ";
第二种:
string sql = "select * from user where user = @username ";
SqlConnection myConnection = new SqlConnection(connStr);
SqlCommand myCommand = new SqlCommand(sql, myConnection);
myCommand.Parameters.Add(new SqlParameter("@username",SqlDbType.VarChar,50));
myCommand.Parameters["@username"].Value = userName;
第三种: SqlConnection myConnection = new SqlConnection(connStr);
SqlCommand myCommand = new SqlCommand("sql", myConnection); //sql是存储过程
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@username",SqlDbType.VarChar,50));
myCommand.Parameters["@username"].Value = userName;
个人推荐使用第三种.
class DataLayer
{
private SqlConnection sqlCon;
public DataLayer()
{
sqlCon = new SqlConnection("server=.;uid=sa;password=;database=CargoData");
} public DataSet sql_selectData(string sqlString) //查询方法
{
SqlDataAdapter sqlDapt = new SqlDataAdapter(sqlString, sqlCon);
DataSet ds = new DataSet();
sqlDapt.Fill(ds);
return ds;
}
}业务层:
class OperationLayer
{
public OperationLayer() { }
public string getAge(string Name)
{
DataLayer dl=new DataLayer();
DataSet ds=new DataSet();
ds=dl.sql_selectData("select Age from Users where UserName='"+Name+"'");
return ds.Tables[0].Rows[0][0].ToString();
}
}代码隐藏文件(.cs):
private void button_Click(object sender, EventArgs e)
{
OperationLayer OL=new OperationLayer();
this.lable.Text=OL.getAge(this.textbox.Text);
}代码比较简单 没做异常 判断等; 数据少就不要用dataset了 占内存