c# - 为什么 Oracle 复制单个插入
问题描述
我创建了一个解析一些文件的 Windows 服务,对于每个处理的文件,我将其记录到 Oracle 数据库中,但是每当我插入一条记录时,它就会在数据库中复制它,下面是完整的详细信息 Window 服务接受放置在文件夹中的文件并在处理后处理它调用 Web API 并尝试发布记录,然后 Web API 尝试调用 Oracle 过程来存储记录。
我尝试创建单独的表,但当我使用 PL/SQL 直接通过过程插入它时,结果也相同,它工作正常并且只插入一行。
一旦网络服务启动,我就将它连接到我的 Web API,就像这样,
private void connectToAPI()
{
using (var client = new HttpClient())
{
//setup client
client.BaseAddress = new Uri(apiBaseUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//setup login data
var formContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", "someuser"),
new KeyValuePair<string, string>("password", "Password"),
});
HttpResponseMessage result = client.PostAsync("/Token", formContent).Result;
var Acesstoken = "";
if (result.IsSuccessStatusCode)
{
string resultContent = result.Content.ReadAsStringAsync().Result;
var jObject = JObject.Parse(resultContent);
Acesstoken = jObject.GetValue("access_token").ToString();
token = string.Format("Bearer {0}", Acesstoken);
}
//return RedirectToLocal(returnUrl);
}
}
在此之后我尝试在解析文件时发布记录,
ApiHelper.APIHelper.PostRequest(token, "InsertLogs", edLog);
这是 PostRequest 的代码
public static HttpResponseMessage PostRequest(string Token, string requestPath, object _obj_To_Pass)
{
using (var client = new HttpClient())
{
//setup client
client.BaseAddress = new Uri(apiBaseUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));//application/json
if (Token != null)
{
client.DefaultRequestHeaders.Add("Authorization", Token);
}
//make request
string strjson = JsonConvert.SerializeObject(_obj_To_Pass);
var buffer = System.Text.Encoding.UTF8.GetBytes(strjson);
var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var responseTask = client.PostAsync(requestPath, byteContent);
responseTask.Wait();
var response = responseTask.Result;
if (!response.IsSuccessStatusCode)
{
// Unwrap the response and throw as an Api Exception:
var ex = CreateApiException(response);
throw ex;
}
return response;
}
}
在 web API 端我有这个代码
[Route("InsertLogs")]
public IHttpActionResult InsertLogs(EDLog edLog)
{
MainDataAccess objMainDataAccess = new MainDataAccess();
objMainDataAccess.InsertEdLog(edLog.FileName,edLog.line,edLog.Status);
return Ok();
}
//Invoked method
public void InsertEdLog(string fileName, string b, string V, string status)
{
string procedure = "PKG_EXTRACTFILE.spInsertEdLog";
OracleParameter[] _OracleParameter = new OracleParameter[4];
_OracleParameter[0] = new OracleParameter("inFileName", OracleDbType.Varchar2, ParameterDirection.Input);
_OracleParameter[0].Value = fileName;
_OracleParameter[1] = new OracleParameter("inB", OracleDbType.Varchar2, ParameterDirection.Input);
_OracleParameter[1].Value = bol;
_OracleParameter[2] = new OracleParameter("inV", OracleDbType.Varchar2, ParameterDirection.Input);
_OracleParameter[2].Value = VIR;
_OracleParameter[3] = new OracleParameter("inStatus", OracleDbType.Varchar2, ParameterDirection.Input);
_OracleParameter[3].Value = status;
_ConnectionClass.ExecuteProcedure(procedure, _OracleParameter);
}
//Execute Procedure method
public DataSet ExecuteProcedure(String _procedure, OracleParameter[] _OracleParameter)
{
OracleCommand _OracleCommand = new OracleCommand();
//DataTable dataTable = new DataTable();
//dataTable = null;
DataSet ds = new DataSet();
try
{
_OracleCommand.Connection = OpenConnection();
_OracleCommand.CommandText = _procedure;
_OracleCommand.Parameters.AddRange(_OracleParameter);
_OracleCommand.CommandType = CommandType.StoredProcedure;
_OracleDataAdapter.SelectCommand = _OracleCommand;
_OracleCommand.ExecuteNonQuery();
_OracleDataAdapter.Fill(ds);
//dataTable = ds.Tables[0];
}
catch (OracleException e)
{
Console.Write("Error - Connection.executeSelectQuery - Query: " + _procedure + " \nException: " + e.StackTrace.ToString());
return null;
}
finally
{
Dispose();
}
return ds;
}
Inserting a single record is producing following value
Also please look at the timestamp
![PL/SQL SS](https://i.ibb.co/2SdjztJ/Capture.jpg)
解决方案
推荐阅读
- java - 调用 RedisOperationsSessionRepository.delete 时出现 NoSuchMethodError
- python - 在 matplotlib 中水平显示单选按钮
- macos - 如何在 google chrome 上的 mac os 上找到下载文件的 URL?
- ios - 我想获取用户电子邮件的子字符串并将它们定向到某个视图控制器
- python - pyinstaller 生成的可执行文件找不到 octave_kernel\\kernel.json
- bash - 如何使 sed “脚本”重新启动匹配而不是退出(“重复”而不是“退出”命令)?
- git - 运行 git heroku push master 时出现致命错误
- c++ - 如何使用 QComboBox 选择如何保存 QImage 的格式
- database - 如何计算mongodb中子子内部列表的大小?
- python - 在文本文件的特定部分查找全年