请大虾进来解决问题,远程传输问题。
我用c#写了一个远程调用程序,我在客户端查询时候传入了 一个string[]的数组,其中包含sql和sql的参数,
在服务端的连接数据库时将sql和sql的参数拼成一个oraclecommond,执行查询。很好用,可以查出数据,
但是在执行修改和删除时,服务端就会抛出一个异常,因为远程,所以不知道是什么异常,
程序如下:
public DataSet ExecQueryReader(string[] str)
{
DataSet ds = new DataSet();
// 取得str中的有值得元素的个数
ArrayList b = new ArrayList();
for (int k = 0; k < str.Length;k++)
{
if (str[k] != null && str[k] != "")
{
b.Add(str[k]);
}
}
// 取得实际的个数
int iCent = b.Count;
// 拼接sql
if (iCent != 0)
{
OracleCommand oraCmd = new OracleCommand();
oraCmd.Parameters.Clear();
oraCmd.CommandText = str[0];
oraCmd.CommandType = CommandType.Text;
string strSql = str[0];
string strCanShu=strSql;
for (int i = 1; i < iCent; i++)
{
strCanShu = checkE(strCanShu);
int iIndex1 = strCanShu.IndexOf(" ");
string a = strCanShu.Substring(0,iIndex1);
oraCmd.Parameters.Add(new OracleParameter(a, OracleType.NVarChar)).Value =
System.Text.Encoding.Unicode.GetString(System.Text.Encoding.Unicode.GetBytes(b[i].ToString()));
}
// 创建数据库连接
conn = new OracleConnection(connstring);
oraCmd.Connection = conn;
OracleDataReader oraReader = null;
try
{
conn.Open();
oraReader = oraCmd.ExecuteReader();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
// 调用一个将DataReader转化为DataSet的方法
ds = DataReaderToDataSet(oraReader);
}
return ds;
}
这是查询方法,可以查询出来。以下是修改方法:
public int ExecUpdateLob(string[] str)
{
int iRtnCnt = 0;
int k = str.Length;
if (k != 0)
{
OracleCommand oraCmd = new OracleCommand();
oraCmd.Parameters.Clear();
oraCmd.CommandText = str[0];
oraCmd.CommandType = CommandType.Text;
oraCmd.Connection = conn;
string strSql = str[0];
string strIns=strSql;
for (int i = 1; i < str.Length; i ++)
{
strIns = checkE(strIns);
int iIndex1 = strIns.IndexOf(",");
string strTmpIns = strIns.Substring(0,iIndex1);
if (str[i] != "")
{
oraCmd.Parameters.Add(new OracleParameter(strTmpIns, OracleType.NVarChar)).Value =
System.Text.Encoding.Unicode.GetString(System.Text.Encoding.Unicode.GetBytes(str[i]));
}
else
{
oraCmd.Parameters.Add(new OracleParameter(strTmpIns, OracleType.NVarChar));
oraCmd.Parameters[strTmpIns].IsNullable = true;
oraCmd.Parameters[strTmpIns].Value = System.DBNull.Value;
}
}
// 创建数据库连接
OracleConnection conUpdate = new OracleConnection(connstring);
oraCmd.Transaction = rtnmyTrans;
try
{
conUpdate.Open();
iRtnCnt = oraCmd.ExecuteNonQuery();
}
catch (Exception e)
{
return -1;
}
}
return iRtnCnt;
}
如果说是OracleCommand 有可能有问题的话,可是删除方法只是传入一个string 类型的sql但仍然抛出异常。
删除方法如下:
//************************************************************************
/// <summary>
/// 用于执行更新、插入、删除操作的方法。根据用户输入的语句来执行数据库操作。
/// </summary>
/// <param name="sqlStr"></param>
/// <return>返回sql语句执行的结果</return>
//************************************************************************
public int ExecUpdate(string sqlStr)
{
string sql = sqlStr;
int intResult = 0;
// 判断SQL语句是否为空
if (sql == "" || null == sql)
{
Console.WriteLine("SQL 语句错误。");
return -1;
}
// 创建数据库连接
OracleConnection conDel = new OracleConnection(connstring);
try
{
OracleCommand cmd = new OracleCommand(sql,conDel);
cmd.Transaction = rtnmyTrans;
intResult = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine("数据库操作失败。" + e.Message);
return -1;
}
return intResult;
}
我不知道是数据库连接的问题还是权限的问题,请各位大虾能指导一下,帮忙解决一下。