首页 > 解决方案 > 我正在尝试将 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'。

标签: c#

解决方案


如果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:"怎么办?为什么只插入第一个,而不插入第二个?

推荐阅读