private void AddStudent(){
string strName =txtName.Text.Trim();
string strPwd = txtPwd.Text.Trim();
string strSql ="insert into Student (name,pwd) values(@name,@pwd) ";
SqlConnection conn = new SqlConnection(" server=.;database=TestDB;uid=sa;pwd=pwd123 ");
SqlCommand cmd = new SqlCommand(strSql,conn);
//参数数组 对应Sql语句中的参数
SqlParameter [] paras ={
new SqlParameter("@name",strName),
new SqlParameter("@pwd",strPwd)
};
cmd.Parameters.AddRange(paras);
conn.Open();
int result = Convert.ToInt32(cmd.ExecuteScalar());
conn.Close();
if(result>0){
...
}eles{
...
}
}
上面的代码是访问SQL Server数据库的代码。如果本文中提到的数据分别在Access、MySQL、Oracle数据库,那么对应的参数化SQL语句及参数分别如下:
数据库 | Access | MySQL | Oracle |
SQL语句 | select * from UserInfo where sex=? and age>? | select * from UserInfo where sex=?sex and age>?age | select * from UserInfo where sex=:sex and age>:age |
参数 | OleDbParameter | MySqlParameter | OracleParameter |
实例化参数 | OleDbParameter p=new OleDbParameter(“?”, OleDbType. Boolean); | MySqlParameter p=new MySqlParameter(“?sex”, MySqlDbType.Bit); | OracleParameter p=new OracleParameter(“:sex”, OracleType.Byte); |
赋值 | p.Value=true; | p.Value=1; | p.Value=1; |
通过上面的实例代码我们可以看出尽管SQL语句大体相似,但是在不同数据库的特点,可能参数化SQL语句不同,例如在Access中参数化SQL语句是在参数直接以“?”作为参数名,在SQL Server中是参数有“@”前缀,在MySQL中是参数有“?”前缀,在Oracle中参数以“:”为前缀。
注意:因为在Access中参数名都是“?”,所以给参数赋值一定要按照列顺序赋值,否则就有可能执行出错。
以下是 oracle数据库中:
public DataTable CheckUser(string userName, string pwd) { OracleConnection conn = new OracleConnection(connStr); DataTable dt = new DataTable(); string sql = string.Format(@"SELECT GUID, USERNAME, PWD, CREATEDATE,NICKNAME FROM F_USERS WHERE status =1 and USERNAME =:USERNAME and PWD =:PWD"); try { //参数数组 对应Sql语句中的参数 OracleParameter[] paras ={ new OracleParameter(":USERNAME",userName), new OracleParameter(":PWD",pwd) }; OracleCommand cmd = new OracleCommand(sql, conn); cmd.Parameters.AddRange(paras); conn.Open(); OracleDataAdapter oda = new OracleDataAdapter(cmd); oda.Fill(dt); return dt; } catch { return dt; } finally { conn.Close(); } }