c# - 我正在尝试将 word doc 中的数据添加到访问数据库,但它让我的操作员缺少语法
问题描述
我正在阅读 word 文件并在找到 Favour 后添加数据。只是不会在喜欢后添加数据。使用此代码的第一条记录添加了完美的记录,但第二次它给出了语法错误(缺少运算符)。请帮我正确添加所有记录
private void button1_Click(object sender, EventArgs e)
{
try
{
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
object nullobj = System.Reflection.Missing.Value;
object file = openFileDialog1.FileName;
Document doc = app.Documents.Open(@"C:\Users\juilee Raut\Downloads\ITCL-CAES 1 (1).docx");
doc.ActiveWindow.Selection.WholeStory();
doc.ActiveWindow.Selection.Copy();
IDataObject da = Clipboard.GetDataObject();
string text = da.GetData(DataFormats.Text).ToString();
richTextBox1.Text = text;
string data = string.Empty;
string[] data1 = richTextBox1.Lines;
List<string> Info = new List<string>();
int i = 0;
int j = 0;
int m = 0;
while (i < data1.Length)
{
if (data1[i].StartsWith("FAVOUR:"))
{
j++;
if (m == 0)
{
data = data + data1[i].ToString() + Environment.NewLine;
string inf = string.Join(Environment.NewLine, Info.ToArray());
con.Open();
OleDbCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT into AllData(FullJud) VALUES('" + inf + "')";
cmd.ExecuteNonQuery();
con.Close();
Info.Clear();
inf = string.Empty;
m = 1;
}
}
else
{
m = 0;
if (data1[i] != "")
{
if (data1[i].EndsWith("2017") && data1[i].Length == 10 || data1[i].EndsWith("2016") && data1[i].Length == 10)
{
data = data + data1[i].ToString() + Environment.NewLine + "##ln##" + Environment.NewLine;
Info.Add(data1[i]);
Info.Add("##ln##");
}
else if(data1[i].StartsWith("SECTION:") || data1[i].StartsWith("Section:") || data1[i].StartsWith("SECTION-") || data1[i].Contains("SUBJECT:") || data1[i].StartsWith("Subject:") || data1[i].StartsWith("SUBJECT-") || data1[i].StartsWith("SUBJECTS:"))
{
data = data + data1[i].ToString() + Environment.NewLine;
}
else if(data1[i].EndsWith("Respondent.") || data1[i].EndsWith("Petitioner.") || data1[i].EndsWith("Appellant.") || data1[i].EndsWith("Appellant") || data1[i].EndsWith("Respondent") || data1[i].EndsWith("Counsel,"))
{
data = data + data1[i].ToString() + Environment.NewLine;
}
else
{
data = data + data1[i].ToString() + Environment.NewLine;
Info.Add(data1[i]);
}
}
}
i++;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这是我得到的错误:
"查询表达式 ''391 ITR 382 (BOM) 中的语法错误(缺少运算符):88 TAXMANN.COM 556\r\nHIGH COURT OF BOMBAY \r\nM.S. SANKLECHA AND AK MENON, JJ。\r\n马来语 N . Sanghvi v/s. 所得税官员\r\nIT 上诉编号 1342 OF 2014\r\n31.01.2017\r\n##ln##\r\nSection 80-IB of the Income-tax Act, 1961 -扣除 - 利润 a'。
解决方案
如果Info
包含多个值怎么办,比方说:
Info = { "value1", "value2" }
那么,inf
将是:
inf = "value1\r\nvalue2"
因此,cmd.CommandText
将是:
cmd.CommandText = "INSERT into AllData(FullJud) VALUES('value1\r\nvalue2')";
我很确定这不是想要的行为。
编辑
如果一个值Info
包含一个'
字符怎么办?
Info = { "val'ue" }
那么,inf
将是:
inf = "val'ue"
因此,cmd.CommandText
将是:
cmd.CommandText = "INSERT into AllData(FullJud) VALUES('val'ue')";
// SQL won't understand that part --------------------------|||
这就是你得到错误的地方。
此外,如果Info
改为具有以下值怎么办:
Info = { "value1');DROP TABLE [anytable];--" }
这是典型的 SQL 注入。
一些问题/意见:
- 是
j
用来做什么的? - 目的是
inf = string.Empty;
什么?它是一个局部变量,将被垃圾回收。 - 目的是
data
什么?你会在某个时候使用它吗? while
当您可以使用循环时,您正在使用循环for(int i=0;i<data1.Length;i++)
。- 如果
data1
包含两个以 开头的连续字符串"FAVOUR:"
怎么办?为什么只插入第一个,而不插入第二个?
推荐阅读
- swift - macOS Catalina 10.15.6、Xcode 11.6、Mac Catalyst 应用程序中的 PCH 文件和 SwiftShims 错误中的 Objective-C 运行时不同
- python - ValueError:无法将字符串转换为浮点数:使用 matplotlib、arduino 和 pyqt5 时
- javascript - 如何在 Ejs 模板中打印 Web 抓取的项目?
- asp.net - MAC OS 上 Firefox 和 Chrome 的重音字母
- python - Pandas 行列转换
- android - 如何在配套设备配对屏幕中捕捉用户取消?
- graphql - 如何查询2个不同的图像?
- python - 为什么生成器表达式被称为?
- azure - 托管在 Azure 应用服务中的 .Net Core 的托管服务/后台服务正在停止
- terraform - 如何在 aws_eks_cluster 资源上启用 Windows 支持?