如何将值与本地字符串值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
列中
如有任何建议,我们将不胜感激。
首先进行一点代码审查:
- 不要在名称中使用下划线:
write_To_Database
、r_field
、research_field
、top_value
等 - 不要缩写:
r_field
,abstrct
SqlConnection
、SqlCommand
等应始终封装在使用中,以便正确处理- 不要这样做:
p_abstract = " + document;
,总是使用参数。否则,您将面临SQL注入的风险 - 为什么你先做
SELECT
,然后做INSERT
?为什么不简单地将WHERE
添加到您的INSERT
中呢 - 为什么你的名字不一致:
research_area
与research_field
,document
与abstrct
与p_abstract
现在你的主要问题是:你做了query.Parameters.Add
,却没有添加值。就这么简单:cmd.Parameters.Add("@research_field", SqlDbType.Text).Value = research_field;
。
然而,我对代码的逻辑有点困惑:首先要查找记录的ID,然后插入具有该ID的记录?我觉得这是非常可疑的,因为我认为ID需要是唯一的。