我试图将word doc中的数据添加到访问数据库,但它给了我操作员缺少语法

时间:2018-06-04 08:44:11

标签: c#

我正在阅读word文件并在找到“赞”后添加数据。只是不赞成后添加数据。使用此代码的第一个记录添加了完美的记录,但第二次它给出了语法错误(操作员缺失)。请帮我正确添加所有记录

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 \ n高级BOMBAY法院\ r \ nM.S.SANKLECHA和AK MENON,JJ。\ r \ n \ nMalay N. Sanghvi v / s。所得税官员\ r \ nIT 2014年第1342号上诉期限\ r \ n31.01.2017 \ r \ n ## ln ## \ r \ n \ n税收法案第80-IB节,1961年 - 扣除 - 获利'。“

2 个答案:

答案 0 :(得分:1)

如果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:"开头的连续字符串,该怎么办?为什么你只插入第一个,而不是第二个?

答案 1 :(得分:0)

else
                            {
                                data.Replace("'", "/");
                                data1[i] = data1[i].Replace("'","/");
                                Info.Add(data1[i]);
                                data = data + data1[i].ToString() + Environment.NewLine;
                            }

在其他部分,我只需更换&#39;到/我的问题是解决