Я потратил больше времени, чем хотел бы упомянуть, пытаясь разобраться с этим.Я пытаюсь вызвать хранимую процедуру с помощью команды adodb выполнить в C #.Я делаю то же самое для всех своих параметров, но первый всегда отправляет «system.object» вместо значения, которое я хочу ввести.Я был бы очень признателен за любую помощь.
Вот код:
ADODB.Connection con;
ADODB.Command com;
ADODB.Recordset rst;
ADODB.Parameter prm;
con = null;
con = new ADODB.Connection();
con.Provider = "SQLOLEDB.1";
con.ConnectionString = "Description=MyDB;IntegratedSecurity=SSPI;Trusted_Connection=Yes;APP=MyApp;WSID=MyServer;DATABASE=MyDB";
con.Open(con.ConnectionString , null, null, 0);
com = null;
com = new ADODB.Command();
com.CommandText = "MyStoredProc";
com.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc;
com.NamedParameters = true;
com.Prepared = false;
com.Name = ("MyStoredProc" + System.DateTime.Now.ToString("yyyyMMddHHmmssffff"));
prm = null;
//Location parameter
prm = com.CreateParameter("@LocationNameIn", DataTypeEnum.adVarChar, ParameterDirectionEnum.adParamInput, 80, Convert.ToString("London"));
com.Parameters.Append(prm);
prm.Value = Convert.ToString("London");
prm = null;
//parameter
prm = com.CreateParameter("@Time", DataTypeEnum.adDBTimeStamp, ParameterDirectionEnum.adParamInput, 0, Convert.ToDateTime("01/12/2011 00:20"));
com.Parameters.Append(prm);
prm = null;
//parameter
prm = com.CreateParameter("@Param3", DataTypeEnum.adDouble, ParameterDirectionEnum.adParamInput, 0, 1000.0);
com.Parameters.Append(prm);
prm = null;
//parameter
prm = com.CreateParameter("@Param4", DataTypeEnum.adDouble, ParameterDirectionEnum.adParamInput, 0, -999);
com.Parameters.Append(prm);
prm = null;
//parameter
prm = com.CreateParameter("@Param5", DataTypeEnum.adDouble, ParameterDirectionEnum.adParamInput, 0, 245.9);
com.Parameters.Append(prm);
prm = null;
//parameter
prm = com.CreateParameter("@Param6", DataTypeEnum.adDouble, ParameterDirectionEnum.adParamInput, 0, -999);
com.Parameters.Append(prm);
prm = null;
//parameter
prm = com.CreateParameter("@Param7", DataTypeEnum.adVarChar, ParameterDirectionEnum.adParamInput, 20, "South");
com.Parameters.Append(prm);
prm = null;
//parameter
prm = com.CreateParameter("@Param8", DataTypeEnum.adDouble , ParameterDirectionEnum.adParamInput, 0, 0);
com.Parameters.Append(prm);
prm = null;
// parameter
prm = com.CreateParameter("@Param9", DataTypeEnum.adVarChar, ParameterDirectionEnum.adParamInput, 120, "BlahdiblahPC");
com.Parameters.Append(prm);
prm = null;
com.ActiveConnection = con;
object oRA = new object();
object oPRM = new object();
rst = com.Execute(out oRA, ref oPRM, (int)ExecuteOptionEnum.adExecuteRecord);
Когда я делаю трассировку в базе данных, я получаю следующее:
exec MyStoredProc @ LocationNameIn = 'System.Object', @ Time = '2011-12-01 00:20:00', @ Param3 = 1000, @ Param4 = -999, @ Param5 = 245.90000000000001, @ Param6 = -999,@ Param7 = 'Юг', @ Param8 = 0, @ Param9 = 'BlahdiblahP C'
Таким образом, все параметры работают нормально, кроме первого.Я поиграл с типами данных для параметра и с параметрами выполнения для метода execute команды, но на самом деле понятия не имею, с чего начать.
Заранее спасибо !!!