c# - SQL 命令字符串 c#
问题描述
我目前正在编写一个导出程序事件日志并将其写入数据库的小脚本。但是,我的 SQLinsert
命令有问题。我究竟做错了什么?这只是一个代码剪切
string command = "DECLARE @x xml;";
command += "SELECT @x = P";
command += "FROM OPENROWSET(BULK 'C:\\Users\\NT-AUTORITÄT\\SYSTEM\\MFilesLog\\Event-Log 23.10.2020 09-05.xml', SINGLE_BLOB) AS Products(P)";
command += "SELECT @x";
command += "DECLARE @hdoc int";
command += "EXEC sp_xml_preparedocument @hdoc, OUTPUT, @x";
command += "INSERT INTO [MFlogs].[dbo].[MLogs]";
command += "SELECT * FROM OPENXML(@hdoc, '/Export/root/event/data/objectversion/objver', 2);";
command += "WITH(";
command += "id int '../../../id',";
command += "type varchar(50) '../../../type',";
command += "category varchar(50) '../../../category',";
command += "timestamp varchar(50) '../../../timestamp',";
command += "causedbyuser varchar(50) '../../../causedbyuser',";
command += "objtype varchar(50),";
command += "objid varchar(50),";
command += "version varchar(50),";
command += "objectguid varchar(50) '../objectguid',";
command += "versionguid varchar(50) '../versionguid',";
command += "title varchar(100) '../title',";
command += "displayid int '../displayid')";
SqlCommand cmd = new SqlCommand(command, connection);
int result = cmd.ExecuteNonQuery();
这是事件日志中的错误:
必须声明 @hdoc 标量变量。
有人可以帮忙吗?
解决方案
只看第一行,你就会遇到问题:
command += "SELECT @x = P";
command += "FROM OPENROWSET(BULK 'C:\\Users\\NT-AUTORITÄT\\SYSTEM\\MFilesLog\\Event-Log 23.10.2020 09-05.xml', SINGLE_BLOB) AS Products(P)";
最终会像:
SELECT @x = PFROM OPENROWSET(BULK 'C:\\Users\\NT-AUTORI ....
因为你没有留下任何间距,像这样,但在其他任何地方你也需要它:
command += "SELECT @x = P";
command += " FROM OPENROWSET(BULK 'C:\\Users\\NT-AUTORITÄT\\SYSTEM\\MFilesLog\\Event-Log 23.10.2020 09-05.xml', SINGLE_BLOB) AS Products(P)";
尝试修复所有间距问题,看看会发生什么。
推荐阅读
- visual-studio-code - 需要帮助调试 VSCode 中保存时的格式问题
- javascript - 反应:附加到 url 的文件名
- python - 使用数组检查深度嵌套的字典中的几乎等于(请阅读说明)
- python - testdriven.io django tdd - 运行 docker run 时出现错误:“$”不是有效的端口号
- django - django pytest 案例失败,而邮递员没有
- graphql - 使用 gatsby-source-contentful 使用 Gatsbyjs 和 Contentful 渲染富文本
- amazon-web-services - 如何有条件地使用 Terraform 中的现有资源?
- avr - AVR I/O:数字与模拟输入编程
- angular - Angular 8 -> 10 升级 - 目标 es5 不转译 @angular 模块
- asp.net - 视觉工作室 2019;IIS **快递**;asp.net 4.8(非核心);视窗认证;允许特定服务器本地组访问页面