问题一:(字符串匹配)
(1):比如我有一个字符串str-->str="今天天气很蓝,空气真的很棒,但环境有点脏"
(2):数据库中存在表
baoyi bianyi
好 脏
棒 乱
赞 差
现在我想判断str中是否存在表中某个字段中的。
eg: string connStr1 = "Data Source=****;database=***;User id=sa;Password=1216657001";
SqlConnection comm = new SqlConnection(connStr1);
comm.Open();
接下来怎么办?有什么好的方法吗
问题二:(insert速度过慢)
(1)str1="今天天气很好哦,出去玩玩怎么样"
str2="天气很新鲜,出去锻炼应该很好,你们觉得呢"
.........
strn="*****,******,********。*******"
我现在需要将每句话根据标点切分:比如str1可以切分成三句话:m1=今天天气很好哦,m2=出去玩玩怎么样
然后将m1,m2插入数据库, string mysql1 = "insert into baoyisentence(sentence) values(m1')";然后插入m2
接下来继续对str2进行切分,切分好依次插入数据库,
一直切到strn,并插入数据库。
各位大神们,求支招。问题分开回答哦,要标注一下回答的是问题1还是问题2,O(∩_∩)O谢谢
------解决思路----------------------
1:从数据库中读取成List集合,使用linq Contain判断。
2:使用string.join()方法 分割成array,并拼接成insert 语句。
------解决思路----------------------
1:声明一个类,类包含类似数据库表的那两个字段,从数据看中读取数据到List<类>,然后使用linq 关键字判断。
2:http://www.cnblogs.com/shikyoh/archive/2011/07/01/2095633.html
------解决思路----------------------
1、这种固定的数据,直接cache到服务器上,然后str直接与内存里的集合进行比较,采用Linq
2、所有的字符串按标点符号进行分割,然后拼接成一个sql执行,如果觉得还是慢,查下SqlBulkCopy
------解决思路----------------------
class Demo
{
public string BaoYi{get;set;}
public string BianYi{get;set;}
}
List<Demo> list;//read from db
var str="今天天气很蓝,空气真的很棒,但环境有点脏";
bool isBaoyi = list.Any(x=>str.Contains(x.BaoYi));//true代表获取到了,这里是褒义部分,改x.BianYi就是贬义部分
------解决思路----------------------
拆一句插一句,你这是在逗我,全部拆完了后一次性插入……
------解决思路----------------------
第一个问题:
var result = from q in datatab le.AsEnumerable()
where (str.Contains(q.Field<string>("baoyi"))
------解决思路----------------------
str.Contains(q.Field<string>("bianyi")))
select q;
第二个问题:
所有insert语句通过分号隔开,拼接存在同一个string变量中.SqlBulkCopy 执行这个变量
------解决思路----------------------
存一个List里面不就行了,或者SqlBulkCopy是要用DataTable的,你拆一句直接放DataTable去也行
------解决思路----------------------
问题一、二没必要分开
操作数据库你不用ado.net吗?
以datatable作为操作对象,如果你linq用的数量就asenumerable,内存中查询比你在数据库查询快多了
你第二个关于插入慢的问题,给你一串代码,你就明白了:
datatable的优点需要你发现,该用的时候可不要选错了:)
protected void Button2_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("name"));
for (int i = 0; i < 3; i++)
{
dr = dt.NewRow();
dr[0] = "name" + i.ToString();
dt.Rows.Add(dr);
}
System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("INSERT student(name) VALUES(");
sb.Append("@name)");
da.InsertCommand = new SqlCommand();
da.InsertCommand.CommandText = sb.ToString();
da.InsertCommand.Connection = conn;
SqlParameter sp = new SqlParameter("@name", SqlDbType.VarChar, 50);
sp.SourceVersion = DataRowVersion.Current;
sp.SourceColumn = "name"; // or sp.SourceColumn = Dt.Columns[0].ColumnName;
da.InsertCommand.Parameters.Add(sp);
da.Update(dt);
}
利用ado.net,你将要插入的数据全部整到datatable中,然后一次性插到数据。