Oracle的存储过程的定义CREATE OR REPLACE PROCEDURE PRC_USE_UPDATESTOCK(vpd_cd IN VARCHAR2
,vitem_cd IN VARCHAR2
,vslip_date IN VARCHAR2
,vupdate_type IN VARCHAR2
,vupdate_operator_cd IN VARCHAR2
,vreturn_cd OUT NUMBER
,error_message OUT VARCHAR2)
我在C#里的调用OracleConnection conn = OracleHelper.GetConnection();
OracleTransaction tx = null;
OracleCommand command = new OracleCommand(PROC_NAME,conn,tx);
command.CommandType=CommandType.StoredProcedure;
string errMessage = null;
conn.Open();
foreach (SlipTotalUpdate st in stockTotalUpdates)
{
command.Parameters.Add("vPD_CD",OracleType.VarChar).Value = st.PdCD;
command.Parameters.Add("vitem_cd",OracleType.VarChar).Value = st.ItemCD;
command.Parameters.Add("vslip_date",OracleType.VarChar).Value = st.SlipDate;
command.Parameters.Add("vupdate_type",OracleType.VarChar).Value = st.SlipKind;
command.Parameters.Add("vupdate_operator_cd",OracleType.VarChar).Value = st.EntryOperatorCD;
command.Parameters.Add("vreturn_cd",OracleType.Number);
command.Parameters.Add("error_message",OracleType.VarChar,200);
command.Parameters["vreturn_cd"].Direction = ParameterDirection.Output;
command.Parameters["error_message"].Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
errMessage = command.Parameters["error_message"].Value.ToString();
}
现在的问题是.当我的输入类型的参数值为null时,.net构造的调用里就把这个值为null的参数给丢了.如:正常应该是PRC_USE_UPDATESTOCK(vpd_cd ,vitem_cd ,vslip_date ,vupdate_type ,vupdate_operator_cd ,vreturn_cd ,error_message )
可是假定vpd_cd=null时.
它会变成
PRC_USE_UPDATESTOCK
(vitem_cd ,vslip_date ,vupdate_type ,vupdate_operator_cd ,vreturn_cd ,error_message )就是少为我初始化了一个参数.请问有谁遇到过这种情况么??怎么解决呢??
,vitem_cd IN VARCHAR2
,vslip_date IN VARCHAR2
,vupdate_type IN VARCHAR2
,vupdate_operator_cd IN VARCHAR2
,vreturn_cd OUT NUMBER
,error_message OUT VARCHAR2)
我在C#里的调用OracleConnection conn = OracleHelper.GetConnection();
OracleTransaction tx = null;
OracleCommand command = new OracleCommand(PROC_NAME,conn,tx);
command.CommandType=CommandType.StoredProcedure;
string errMessage = null;
conn.Open();
foreach (SlipTotalUpdate st in stockTotalUpdates)
{
command.Parameters.Add("vPD_CD",OracleType.VarChar).Value = st.PdCD;
command.Parameters.Add("vitem_cd",OracleType.VarChar).Value = st.ItemCD;
command.Parameters.Add("vslip_date",OracleType.VarChar).Value = st.SlipDate;
command.Parameters.Add("vupdate_type",OracleType.VarChar).Value = st.SlipKind;
command.Parameters.Add("vupdate_operator_cd",OracleType.VarChar).Value = st.EntryOperatorCD;
command.Parameters.Add("vreturn_cd",OracleType.Number);
command.Parameters.Add("error_message",OracleType.VarChar,200);
command.Parameters["vreturn_cd"].Direction = ParameterDirection.Output;
command.Parameters["error_message"].Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
errMessage = command.Parameters["error_message"].Value.ToString();
}
现在的问题是.当我的输入类型的参数值为null时,.net构造的调用里就把这个值为null的参数给丢了.如:正常应该是PRC_USE_UPDATESTOCK(vpd_cd ,vitem_cd ,vslip_date ,vupdate_type ,vupdate_operator_cd ,vreturn_cd ,error_message )
可是假定vpd_cd=null时.
它会变成
PRC_USE_UPDATESTOCK
(vitem_cd ,vslip_date ,vupdate_type ,vupdate_operator_cd ,vreturn_cd ,error_message )就是少为我初始化了一个参数.请问有谁遇到过这种情况么??怎么解决呢??
{
vpd_cd=DBNull.value;
}
C#里的null就是没有分配内存,什么也没有。而DBNull.value的意思你一定也猜到了^-^
{
command.Parameters.Add("vPD_CD",OracleType.VarChar).Value = st.PdCD;
}
else
{
command.Parameters.Add("vPD_CD",OracleType.VarChar).Value = System.DBNull.value;
}
如:
if(st.PdCD!=null && st.PdCD.ToString()!="")
{
command.Parameters.Add("vPD_CD",OracleType.VarChar).Value = st.PdCD;
}
else
{
command.Parameters.Add("vPD_CD",OracleType.VarChar).Value = "";
}