如何将值与本地字符串值c#进行比较后存储在sqlserver表中

本文关键字:比较 存储 表中 sqlserver 字符串 | 更新日期: 2023-09-27 17:59:40

这是我的代码。。。其给出与文档的不同查询的余弦相似性值的排序(降序)列表。

   var dd = new List<Tuple<string, double, string>>();
            while ((line = file.ReadLine()) != null)
            {
                dd.Add(Tuple.Create(line, p.calculate_CS(line, document), document));
            }
            var top_value = dd.OrderByDescending(x => x.Item2).FirstOrDefault();
            if (top_value != null)
            { 
                // look up record using top_value.Item3, and then store top_value.Item1
                var abstrct = top_value.Item3.ToString();
                var r_field = top_value.Item1.ToString();
                write_To_Database(abstrct, r_field);
            }

这是数据插入方法。。。。。。

static void write_To_Database(string document, string research_field)
        {
            try
            {
                SqlConnection con = new SqlConnection("Data Source=KHIZER;Initial Catalog=subset_aminer;Integrated Security=True;");
                con.Open();
                SqlCommand query = con.CreateCommand();
                query.CommandText = "select id from sub_aminer_paper where pid between 1 and 500 and DATALENGTH(p_abstract) != 0 and p_abstract = " + document;
                SqlDataReader reader = query.ExecuteReader();

                reader.Read();
                int id = reader.GetInt32(0);
                //reader.Close();
                query.Parameters.Add("@research_field", SqlDbType.Text);
                query.Parameters.Add("@id", SqlDbType.Int);
                query.CommandText = "insert into sub_aminer_paper (research_area) values(@research_field) where id = @id";
                query.ExecuteNonQuery();

                con.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.Message);
            }
            finally
            {
                Console.WriteLine("Executing finally block.");
            }
        }

我想把top(最高余弦相似度值)查询的值存储在数据库中,对照从同一个表中提取的string document。。。表格结构如下。。。

--------------------------------------------------------------------------------
id | pid | p_title | p_author | p_year | p_venue | p_abstract | research_area
--------------------------------------------------------------------------------

字符串文档为p_abstract,查询将保存在research_area 列中

如有任何建议,我们将不胜感激。

如何将值与本地字符串值c#进行比较后存储在sqlserver表中

首先进行一点代码审查:

  • 不要在名称中使用下划线:write_To_Databaser_fieldresearch_fieldtop_value
  • 不要缩写:r_fieldabstrct
  • SqlConnectionSqlCommand等应始终封装在使用中,以便正确处理
  • 不要这样做:p_abstract = " + document;总是使用参数。否则,您将面临SQL注入的风险
  • 为什么你先做SELECT,然后做INSERT?为什么不简单地将WHERE添加到您的INSERT中呢
  • 为什么你的名字不一致:research_arearesearch_fielddocumentabstrctp_abstract

现在你的主要问题是:你做了query.Parameters.Add,却没有添加值。就这么简单:cmd.Parameters.Add("@research_field", SqlDbType.Text).Value = research_field;

然而,我对代码的逻辑有点困惑:首先要查找记录的ID,然后插入具有该ID的记录?我觉得这是非常可疑的,因为我认为ID需要是唯一的。