我以前是用的拼Sql的方法来对数据库进行操作,现在要改成传参数的方式,就是这样的
以前:OracleConnection conn = new OracleConnection(DataString);
OracleCommand cmd = new OracleCommand(Sql,conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
现在:Sql中有参数
OracleConnection conn = new OracleConnection(DataString);
OracleCommand cmd = new OracleCommand(Sql,conn);
cmd.Parameters.Add(PName[i],OracleType.Number);
cmd.Parameters[PName[i]].Value = PValue[j];//这里只写了一个参数,旨在说明方法,实际的程序中i是自增变量,通过循环,把所有的参数附值,Sql中已经通过参数的数组把参数传了进去。
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
我现在要解决的问题:
1、如何通过上面第二种方式(既传参数的方式)把空值传入Oracle数据库中,好像DBNull.Value不行
2、参数传递过程中,对参数的要求,如OracleType.Varchar类型是对应字符串
3、加参数时对参数的长度要求,我只会在整数时控制,但是到了有小数的时候,怎么控制
以前:OracleConnection conn = new OracleConnection(DataString);
OracleCommand cmd = new OracleCommand(Sql,conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
现在:Sql中有参数
OracleConnection conn = new OracleConnection(DataString);
OracleCommand cmd = new OracleCommand(Sql,conn);
cmd.Parameters.Add(PName[i],OracleType.Number);
cmd.Parameters[PName[i]].Value = PValue[j];//这里只写了一个参数,旨在说明方法,实际的程序中i是自增变量,通过循环,把所有的参数附值,Sql中已经通过参数的数组把参数传了进去。
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
我现在要解决的问题:
1、如何通过上面第二种方式(既传参数的方式)把空值传入Oracle数据库中,好像DBNull.Value不行
2、参数传递过程中,对参数的要求,如OracleType.Varchar类型是对应字符串
3、加参数时对参数的长度要求,我只会在整数时控制,但是到了有小数的时候,怎么控制
用null行吗private SqlCommand CreateCommand(string procName, SqlParameter[] prams) {
// make sure connection is open
Open(); //command = new SqlCommand( sprocName, new SqlConnection( ConfigManager.DALConnectionString ) );
SqlCommand cmd = new SqlCommand(procName, con);
cmd.CommandType = CommandType.StoredProcedure; // add proc parameters
if (prams != null) {
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
// return param
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null)); return cmd;
}
SqlServer的空值用DBNull.Value是可以的,我以前试过,可我现在用的是Oracle,有点不一样
public void CreateOracleParameter()
{
OracleParameter myParameter = new OracleParameter("DName", OracleType.VarChar, 14);
myParameter.IsNullable = true;
//你加这句试试;你那个字段是否设了不能空?DBNull.Value没问题
myParameter.Direction = ParameterDirection.Output;
}
//conn.Open();
OracleCommand cmd = new OracleCommand(Sql,conn);
//cmd.CommandType = CommandType.StoredProcedure;