@H_301_6@using System;@H_301_6@using System.Collections;@H_301_6@using System.IO;@H_301_6@using System.Text.RegularExpressions;namespace FullTextSearch.Common{ /// <summary> /// 中文分词器。 /// </summary> @H_301_6@public @H_301_6@class ChineseParse { @H_301_6@private @H_301_6@static @H_301_6@Readonly ChineseWordsHashCountSet _counttable; @H_301_6@static ChineseParse() { _counttable = @H_301_6@new ChineseWordsHashCountSet(); InitFromfile("ChineseDictionary.txt"); } /// <summary> /// 从指定的文件中初始化中文词语字典和字符串次数字典。 /// </summary> /// <param name="filename">文件名</param> @H_301_6@private @H_301_6@static @H_301_6@voID InitFromfile(@H_301_6@string filename) { @H_301_6@string path = Path.Combine(Directory.GetCurrentDirectory(),@"..\..\Common\",filename); @H_301_6@if (file.Exists(path)) { @H_301_6@using (StreamReader sr = file.OpenText(path)) { @H_301_6@string s = ""; @H_301_6@while ((s = sr.Readline()) != @H_301_6@null) { ChineseWordUnit _tempunit = InitUnit(s); _counttable.InsertWord(_tempunit.Word); } } } } /// <summary> /// 将一个字符串解析为ChineseWordUnit。 /// </summary> /// <param name="s">字符串</param> /// <returns>解析得到的ChineseWordUnit</returns> /// 4 /// 0 @H_301_6@private @H_301_6@static ChineseWordUnit InitUnit(@H_301_6@string s) { @H_301_6@var reg = @H_301_6@new Regex(@"\s+"); @H_301_6@string[] temp = reg.Split(s); //if (temp.Length != 2) //{ // throw new Exception("字符串解析错误:" + s); //} @H_301_6@if (temp.Length != 1) { @H_301_6@throw @H_301_6@new Exception("字符串解析错误:" + s); } @H_301_6@return @H_301_6@new ChineseWordUnit(temp[0],Int32.Parse("1")); } /// <summary> /// 分析输入的字符串,将其切割成一个个的词语。 /// </summary> /// <param name="s">待切割的字符串</param> /// <returns>所切割得到的中文词语数组</returns> @H_301_6@public @H_301_6@static @H_301_6@string[] ParseChinese(@H_301_6@string s) { @H_301_6@int _length = s.Length; @H_301_6@string _temp = String.Empty; @H_301_6@var _words = @H_301_6@new ArrayList(); @H_301_6@for (@H_301_6@int i = 0; i < s.Length;) { _temp = s.Substring(i,1); @H_301_6@if (_counttable.GetCount(_temp) > 1) { @H_301_6@int j = 2; @H_301_6@for (; i + j < s.Length + 1 && _counttable.GetCount(s.Substring(i,j)) > 0; j++) { } _temp = s.Substring(i,j - 1); i = i + j - 2; } i++; _words.Add(_temp); } @H_301_6@var _tempStringArray = @H_301_6@new @H_301_6@string[_words.Count]; _words.copyTo(_tempStringArray); @H_301_6@return _tempStringArray; } }}ChineseWordsHashCountSet.cs
@H_301_6@using System.Collections;namespace FullTextSearch.Common{ /// <summary> /// 记录字符串出现在中文字典所录中文词语的前端的次数的字典类。如字符串"中"出现在"中国"的前端,则在字典中记录一个次数。 /// </summary> @H_301_6@public @H_301_6@class ChineseWordsHashCountSet { /// <summary> /// 记录字符串在中文词语中出现次数的Hashtable。键为特定的字符串,值为该字符串在中文词语中出现的次数。 /// </summary> @H_301_6@private @H_301_6@Readonly Hashtable _roottable; /// <summary> /// 类型初始化。 /// </summary> @H_301_6@public ChineseWordsHashCountSet() { _roottable = @H_301_6@new Hashtable(); } /// <summary> /// 查询指定字符串出现在中文字典所录中文词语的前端的次数。 /// </summary> /// <param name="s">指定字符串</param> /// <returns>字符串出现在中文字典所录中文词语的前端的次数。若为-1,表示不出现。</returns> @H_301_6@public @H_301_6@int GetCount(@H_301_6@string s) { @H_301_6@if (!_roottable.ContainsKey(s.Length)) { @H_301_6@return -1; } @H_301_6@var _temptable = (Hashtable) _roottable[s.Length]; @H_301_6@if (!_temptable.ContainsKey(s)) { @H_301_6@return -1; } @H_301_6@return (@H_301_6@int) _temptable[s]; } /// <summary> /// 向次数字典中插入一个词语。解析该词语,插入次数字典。 /// </summary> /// <param name="s">所处理的字符串。</param> @H_301_6@public @H_301_6@voID InsertWord(@H_301_6@string s) { @H_301_6@for (@H_301_6@int i = 0; i < s.Length; i++) { @H_301_6@string _s = s.Substring(0,i + 1); InsertSubString(_s); } } /// <summary> /// 向次数字典中插入一个字符串的次数记录。 /// </summary> /// <param name="s">所插入的字符串。</param> @H_301_6@private @H_301_6@voID InsertSubString(@H_301_6@string s) { @H_301_6@if (!_roottable.ContainsKey(s.Length) && s.Length > 0) { @H_301_6@var _newHashtable = @H_301_6@new Hashtable(); _roottable.Add(s.Length,_newHashtable); } @H_301_6@var _temptable = (Hashtable) _roottable[s.Length]; @H_301_6@if (!_temptable.ContainsKey(s)) { _temptable.Add(s,1); } @H_301_6@else { _temptable[s] = (@H_301_6@int) _temptable[s] + 1; } } }}ChineseWordUnit.cs
namespace FullTextSearch.Common{ @H_301_6@public @H_301_6@struct ChineseWordUnit { @H_301_6@private @H_301_6@Readonly @H_301_6@int _power; @H_301_6@private @H_301_6@Readonly @H_301_6@string _word; /// <summary> /// 结构初始化。 /// </summary> /// <param name="word">中文词语</param> /// <param name="power">该词语的权重</param> @H_301_6@public ChineseWordUnit(@H_301_6@string word,@H_301_6@int power) { _word = word; _power = power; } /// <summary> /// 中文词语单元所对应的中文词。 /// </summary> @H_301_6@public @H_301_6@string Word { @H_301_6@get { @H_301_6@return _word; } } /// <summary> /// 该中文词语的权重。 /// </summary> @H_301_6@public @H_301_6@int Power { @H_301_6@get { @H_301_6@return _power; } } }}ChineseDictionary.txt 主窗体界面 MainManager.cs
@H_301_6@using System;@H_301_6@using System.Collections.Generic;@H_301_6@using System.Data;@H_301_6@using System.Drawing;@H_301_6@using System.windows.Forms;@H_301_6@using FullTextSearch.Common;@H_301_6@using Npgsql;namespace FullTextSearch{ @H_301_6@public @H_301_6@partial @H_301_6@class MainManager : Form { @H_301_6@private @H_301_6@Readonly Postgresql pg = @H_301_6@new Postgresql(); @H_301_6@private @H_301_6@Readonly sqlquerys sqlquerys = @H_301_6@new sqlquerys(); @H_301_6@private @H_301_6@char analysisType; @H_301_6@private @H_301_6@string createConnString = ""; @H_301_6@private DataSet dataSet = @H_301_6@new DataSet(); @H_301_6@private Datatable datatable = @H_301_6@new Datatable(); @H_301_6@private @H_301_6@char odabirAndOr; @H_301_6@private @H_301_6@char vrstaPretrazivanja; @H_301_6@public MainManager() { InitializeComponent(); rbtn_AND.Checked = @H_301_6@true; rbtnNeizmjenjeni.Checked = @H_301_6@true; odabirAndOr = '*'; radiobutton_Day.Checked = @H_301_6@true; radiobutton_Day.Checked = @H_301_6@true; } @H_301_6@private @H_301_6@voID Form1_Load(@H_301_6@object sender,EventArgs e) { gb_unosPodataka.Enabled = @H_301_6@false; groupBox_Search.Enabled = @H_301_6@false; groupBox_Analysis.Enabled = @H_301_6@false; button_disconnect.Enabled = @H_301_6@false; button_Pretrazi.Backcolor = color.WhiteSmoke; button_disconnect.Backcolor = color.WhiteSmoke; button_unosTekstaUBazu.Backcolor = color.WhiteSmoke; button1.Backcolor = color.WhiteSmoke; } @H_301_6@private @H_301_6@voID button_unosTekstaUBazu_Click(@H_301_6@object sender,EventArgs e) { @H_301_6@string searchTextBoxString = rTB_unosTextaUBazu.Text; @H_301_6@if (searchTextBoxString != "") { pg.insertIntotable(searchTextBoxString,pg.conn); MessageBox.Show(searchTextBoxString + " 添加到数据库!"); rTB_unosTextaUBazu.Clear(); } @H_301_6@else { MessageBox.Show("不允许空数据!"); } } @H_301_6@private @H_301_6@voID button_Pretrazi_Click(@H_301_6@object sender,EventArgs e) { @H_301_6@string stringToSearch; @H_301_6@string sql; @H_301_6@string highlitedText; @H_301_6@string rank; @H_301_6@string check; stringToSearch = txt_Search.Text.Trim(); @H_301_6@var List = @H_301_6@new List<@H_301_6@string>(ChineseParse.ParseChinese(stringToSearch)); ; sql = sqlquerys.createsqlString(List,odabirAndOr,vrstaPretrazivanja); richTextBox1.Text = sql; check = sqlquerys.testIfEmpty(stringToSearch); pg.insertIntoAnalysistable(stringToSearch,pg.conn); pg.openConnection(); @H_301_6@var command = @H_301_6@new NpgsqlCommand(sql,pg.conn); NpgsqlDataReader reader = command.ExecuteReader(); @H_301_6@int count = 0; linkLabel_Rezultat.Text = " "; @H_301_6@while (reader.Read()) { highlitedText = reader[1].ToString(); rank = reader[3].ToString(); linkLabel_Rezultat.Text += highlitedText + "[" + rank + "]\n"; count++; } labelbrojac.Text = "找到的文件数量: " + count; pg.closeConnection(); } @H_301_6@private @H_301_6@voID rbtn_AND_CheckedChanged(@H_301_6@object sender,EventArgs e) { odabirAndOr = '*'; } @H_301_6@private @H_301_6@voID rbtn_OR_CheckedChanged(@H_301_6@object sender,EventArgs e) { odabirAndOr = '+'; } @H_301_6@private @H_301_6@voID rbtnNeizmjenjeni_CheckedChanged(@H_301_6@object sender,EventArgs e) { vrstaPretrazivanja = 'A'; } @H_301_6@private @H_301_6@voID rbtn_Rijecnici_CheckedChanged(@H_301_6@object sender,EventArgs e) { vrstaPretrazivanja = 'B'; } @H_301_6@private @H_301_6@voID rbtn_Fuzzy_CheckedChanged(@H_301_6@object sender,EventArgs e) { vrstaPretrazivanja = 'C'; } @H_301_6@private @H_301_6@voID button_Connect_Click(@H_301_6@object sender,EventArgs e) { @H_301_6@if (connectMe()) { gb_unosPodataka.Enabled = @H_301_6@true; groupBox_Search.Enabled = @H_301_6@true; groupBox_Analysis.Enabled = @H_301_6@true; textBox_Database.Enabled = @H_301_6@false; textBox_IP.Enabled = @H_301_6@false; textBox_Port.Enabled = @H_301_6@false; textBox_Password.Enabled = @H_301_6@false; textBox_UserID.Enabled = @H_301_6@false; button_Connect.Enabled = @H_301_6@false; button_disconnect.Enabled = @H_301_6@true; button_Pretrazi.Backcolor = color.SkyBlue; button_disconnect.Backcolor = color.IndianRed; button_unosTekstaUBazu.Backcolor = color.MediumSeaGreen; button1.Backcolor = color.MediumSeaGreen; button_Connect.Backcolor = color.WhiteSmoke; } } @H_301_6@private @H_301_6@voID button_disconnect_Click(@H_301_6@object sender,EventArgs e) { gb_unosPodataka.Enabled = @H_301_6@false; groupBox_Search.Enabled = @H_301_6@false; groupBox_Analysis.Enabled = @H_301_6@false; textBox_Database.Enabled = @H_301_6@true; textBox_IP.Enabled = @H_301_6@true; textBox_Port.Enabled = @H_301_6@true; textBox_Password.Enabled = @H_301_6@true; textBox_UserID.Enabled = @H_301_6@true; button_Connect.Enabled = @H_301_6@true; button_disconnect.Enabled = @H_301_6@false; button_Pretrazi.Backcolor = color.WhiteSmoke; button_disconnect.Backcolor = color.WhiteSmoke; button_unosTekstaUBazu.Backcolor = color.WhiteSmoke; button1.Backcolor = color.WhiteSmoke; button_Connect.Backcolor = color.MediumSeaGreen; txt_Search.Text = ""; linkLabel_Rezultat.Text = ""; richTextBox1.Text = ""; labelbrojac.Text = ""; } @H_301_6@private @H_301_6@bool connectMe() { createConnString += "Server=" + textBox_IP.Text + ";Port=" + textBox_Port.Text + ";User ID=" + textBox_UserID.Text + ";Password=" + textBox_Password.Text + ";Database=" + textBox_Database.Text + ";"; sqlquerys.setTheKey(createConnString); pg.setConnectionString(); pg.setConnection(); @H_301_6@if (pg.openConnection()) { MessageBox.Show("您已成功连接!"); pg.closeConnection(); @H_301_6@return @H_301_6@true; } @H_301_6@return @H_301_6@false; } @H_301_6@private @H_301_6@voID button1_Click(@H_301_6@object sender,EventArgs e) { @H_301_6@string selectedTimestamp; selectedTimestamp = dateTimePicker_From.Value.ToString("dd-MM-yyyy hh:mm:ss") + " " + dateTimePicker_To.Value.ToString("dd-MM-yyyy hh:mm:ss"); @H_301_6@var analize = @H_301_6@new Analysis(selectedTimestamp,analysisType); analize.Show(); } @H_301_6@private @H_301_6@voID radiobutton_Day_CheckedChanged(@H_301_6@object sender,EventArgs e) { analysisType = 'D'; } @H_301_6@private @H_301_6@voID radiobutton_Hour_CheckedChanged(@H_301_6@object sender,EventArgs e) { analysisType = 'H'; } }}sqlquerys.cs代码:
@H_301_6@using System.Collections.Generic;namespace FullTextSearch{ @H_301_6@internal @H_301_6@class sqlquerys { @H_301_6@private @H_301_6@static @H_301_6@string giveMeTheKey; @H_301_6@private @H_301_6@static @H_301_6@int tempInt = 1; //设置连接字符串 @H_301_6@public @H_301_6@voID setTheKey(@H_301_6@string connString) { giveMeTheKey = connString; giveMeTheKey += ""; } //将连接字符串存储在静态变量中 @H_301_6@public @H_301_6@string getTheKey() { giveMeTheKey += ""; @H_301_6@return giveMeTheKey; } @H_301_6@public @H_301_6@voID setCounter() { tempInt = 1; } //根据AND和OR的选择分析字符串进行搜索 @H_301_6@public @H_301_6@string createFunctionString(List<@H_301_6@string> searchList,@H_301_6@char selector) { @H_301_6@string TempString = ""; @H_301_6@string[] TempFIEld = @H_301_6@null; @H_301_6@int i = 0; @H_301_6@int j = 0; @H_301_6@foreach (@H_301_6@string searchStringInList @H_301_6@in searchList) { @H_301_6@if (j != 0) { @H_301_6@if (selector == '+') TempString = TempString + " | "; @H_301_6@else @H_301_6@if (selector == '*') TempString = TempString + " & "; } j = 1; TempFIEld = splitListForinput(searchStringInList); TempString = TempString + "("; @H_301_6@foreach (@H_301_6@string justTempString @H_301_6@in TempFIEld) { @H_301_6@if (i != 0) { TempString = TempString + " & "; } TempString = TempString + justTempString; i = 1; } TempString = TempString + ")"; i = 0; } @H_301_6@return TempString; } //帮助方法 @H_301_6@public List<@H_301_6@string> splitinputFIEld(@H_301_6@string[] inputFIEld) { @H_301_6@var unfinishedList = @H_301_6@new List<@H_301_6@string>(); @H_301_6@foreach (@H_301_6@string splitString @H_301_6@in inputFIEld) { unfinishedList.Add(splitString); } @H_301_6@return unfinishedList; } //帮助方法 @H_301_6@public @H_301_6@string[] splitListForinput(@H_301_6@string inputString) { @H_301_6@string[] parsedList = @H_301_6@null; parsedList = inputString.Split(' '); @H_301_6@return parsedList; } //在Postgresql中创建ts功能的功能,用于字典搜索 @H_301_6@public @H_301_6@string createTsFunction(@H_301_6@string tsstring) { @H_301_6@string tsheadline = ""; @H_301_6@string tsRank = ""; @H_301_6@string tsFunction = ""; tsheadline = ",\n ts_headline(\"content\",to_tsquery('" + tsstring + "')),\"content\""; tsRank = ",\n ts_rank(to_tsvector(\"content\"),to_tsquery('" + tsstring + "')) rank"; tsFunction = tsheadline + tsRank; @H_301_6@return tsFunction; } //创建SQL查询依赖于选择哪种类型的搜索,也取决于AND或OR选择器 @H_301_6@public @H_301_6@string createsqlString(List<@H_301_6@string> searchList,@H_301_6@char selector,@H_301_6@char vrstaPretrazivanja) { @H_301_6@string selectString = ""; @H_301_6@string myTempString = ""; @H_301_6@string TempString = ""; @H_301_6@int i = 0; TempString = createFunctionString(searchList,selector); TempString = createTsFunction(TempString); selectString = "SELECT \"ID\"" + TempString + "\nFROM \"texttable\" \nWHERE "; @H_301_6@if (vrstaPretrazivanja == 'A') { @H_301_6@foreach (@H_301_6@string myString @H_301_6@in searchList) { @H_301_6@if (i == 0) { myTempString = myTempString + "\"content\" liKE '%" + myString + "%' "; i++; } @H_301_6@else { @H_301_6@if (selector == '*') myTempString = myTempString + "\nAND \"content\" liKE '%" + myString + "%' "; @H_301_6@else @H_301_6@if (selector == '+') myTempString = myTempString + "\nor \"content\" liKE '%" + myString + "%' "; } } } @H_301_6@else @H_301_6@if (vrstaPretrazivanja == 'B') { @H_301_6@foreach (@H_301_6@string myString @H_301_6@in searchList) { @H_301_6@string temporalString = ""; @H_301_6@string[] testingString = myString.Split(' '); @H_301_6@for (@H_301_6@int k = 0; k < testingString.Length; k++) { @H_301_6@if (k != testingString.Length - 1) { temporalString += testingString[k] + " & "; } @H_301_6@else { temporalString += testingString[k]; } } @H_301_6@if (i == 0) { myTempString = myTempString + "to_tsvector(\"content\") @@ to_tsquery('english','" + temporalString + "')"; i++; } @H_301_6@else { @H_301_6@if (selector == '*') myTempString = myTempString + "\nAND to_tsvector(\"content\") @@ to_tsquery('english','" + temporalString + "')"; @H_301_6@else @H_301_6@if (selector == '+') myTempString = myTempString + "\nor to_tsvector(\"content\") @@ to_tsquery('english','" + temporalString + "')"; } } } @H_301_6@if (vrstaPretrazivanja == 'C') { @H_301_6@foreach (@H_301_6@string myString @H_301_6@in searchList) { @H_301_6@if (i == 0) { myTempString = myTempString + "\"content\" % '" + myString + "' "; i++; } @H_301_6@else { @H_301_6@if (selector == '*') myTempString = myTempString + "\nAND \"content\" % '" + myString + "' "; @H_301_6@else @H_301_6@if (selector == '+') myTempString = myTempString + "\nor \"content\" % '" + myString + "' "; } } } selectString = selectString + myTempString + "\norDER BY rank DESC"; @H_301_6@return selectString; } @H_301_6@public @H_301_6@string testIfEmpty(@H_301_6@string searchedText) { @H_301_6@string checkingIfEmpty = "SELECT * FROM \"analysistable\" WHERE \"searchedtext\" =' " + searchedText + "'"; @H_301_6@return checkingIfEmpty; } @H_301_6@public @H_301_6@string queryForAnalysis(@H_301_6@char analysisChoice) { @H_301_6@string myTestsql = ""; @H_301_6@if (analysisChoice == 'H') { //这个查询是这样写的只是为了测试的目的,它需要改变 myTestsql = "SELECT * FROM crosstab('SELECT CAST((\"searchedtext\") AS text) searchedText," + " CAST(EXTRACT(HOUR FROM \"timeOfSearch\") AS int) AS sat,CAST(COUNT(*) AS int) AS broj FROM \"analysistable\" GROUP BY \"searchedText\",sat" + " ORDER BY \"searchedtext\",sat','SELECT rbrSata FROM sat ORDER BY rbrSata') AS pivottable (\"searchedText\" TEXT,t0_1 INT,t1_2 INT" + ",t2_3 INT,t3_4 INT,t4_5 INT,t5_6 INT,t6_7 INT,t7_8 INT,t8_9 INT,t9_10 INT,t10_11 INT,t11_12 INT,t12_13 INT" + ",t13_14 INT,t14_15 INT,t15_16 INT,t16_17 INT,t17_18 INT,t18_19 INT,t19_20 INT,t20_21 INT,t21_22 INT,t22_23 INT,t23_00 INT) ORDER BY \"searchedText\""; @H_301_6@return myTestsql; } @H_301_6@if (analysisChoice == 'D') { //这个查询是这样写的只是为了测试的目的,它需要改变 myTestsql += "SELECT *FROM crosstab ('SELECT CAST((\"searchedtext\") AS text) AS searchedText,CAST(EXTRACT(DAY FROM \"dateOfSearch\") AS int) AS dan" + "," + "dan ORDER BY \"searchedtext\",dan','SELECT rbrDana FROM dan ORDER BY rbrDana') AS pivottable(\"searchedtext\" TEXT"; @H_301_6@return myTestsql; } @H_301_6@return myTestsql; } //此方法用于解析日期 @H_301_6@public @H_301_6@int[] parseForDates(@H_301_6@string date) { @H_301_6@string[] temp; @H_301_6@var tempInt = @H_301_6@new @H_301_6@int[3]; temp = date.Split('-'); @H_301_6@for (@H_301_6@int i = 0; i < 3; i++) { tempInt[i] = @H_301_6@int.Parse(temp[i]); } @H_301_6@return tempInt; } //此代码用于创建分析,它执行一些日期/时间 *** 作,以便能够为选定的日期/时间创建分析。 @H_301_6@public @H_301_6@string createsqlForDayAnalysis(@H_301_6@string dateFrom,@H_301_6@string dateto) { @H_301_6@string insertIntoTemptable = ""; @H_301_6@string dateTimeForAnalysis = ""; @H_301_6@int[] tempFrom = parseForDates(dateFrom); @H_301_6@int[] tempTo = parseForDates(dateto); //月份变更算法 @H_301_6@while (tempFrom[0] != tempTo[0] || tempFrom[1] != tempTo[1]) { @H_301_6@if (tempFrom[1] == tempTo[1]) { @H_301_6@if (tempFrom[0] != tempTo[0]) { @H_301_6@for (@H_301_6@int i = tempInt + 1; tempFrom[0] + 2 < tempTo[0] + 2; i++) { insertIntoTemptable += "INSERT INTO \"dan\" VALUES (" + i + ");"; dateTimeForAnalysis += ",dd" + tempFrom[0] + tempFrom[1] + tempFrom[2] + " INT"; tempInt = i; tempFrom[0]++; } } } @H_301_6@if (tempFrom[1] != tempTo[1]) { @H_301_6@if (tempFrom[1]%2 == 0 || tempFrom[1] == 7 || tempFrom[1] == 1) { @H_301_6@for (@H_301_6@int i = tempInt; tempFrom[0] < 31 && tempFrom[1] != tempTo[1]; i++) { insertIntoTemptable += "INSERT INTO \"dan\" VALUES (" + i + ");"; dateTimeForAnalysis += ",dd" + tempFrom[0] + tempFrom[1] + tempFrom[2] + " INT"; tempInt = i; tempFrom[0]++; @H_301_6@if (tempFrom[0] == 31) { tempFrom[1]++; tempFrom[0] = 1; } } } } } dateTimeForAnalysis += ") ORDER BY \"searchedtext\""; @H_301_6@return dateTimeForAnalysis + "#" + insertIntoTemptable; } }}Postgresql.cs代码:
@H_301_6@using System;@H_301_6@using System.windows.Forms;@H_301_6@using Npgsql;@H_301_6@using NpgsqlTypes;namespace FullTextSearch{ @H_301_6@public @H_301_6@class Postgresql { @H_301_6@private @H_301_6@static @H_301_6@int tempInt = 1; @H_301_6@private @H_301_6@Readonly sqlquerys sql = @H_301_6@new sqlquerys(); @H_301_6@public NpgsqlConnection conn; @H_301_6@public @H_301_6@string connectionstring; @H_301_6@private @H_301_6@string newConnString; @H_301_6@public Postgresql() { setConnectionString(); setConnection(); } @H_301_6@public @H_301_6@voID setConnectionString() { newConnString = sql.getTheKey(); connectionstring = String.Format(newConnString); setConnection(); } @H_301_6@public @H_301_6@voID setConnection() { conn = @H_301_6@new NpgsqlConnection(connectionstring); } @H_301_6@public @H_301_6@bool openConnection() { @H_301_6@try { conn.open(); @H_301_6@return @H_301_6@true; } @H_301_6@catch { MessageBox.Show("Unable to connect! Check parameters!"); @H_301_6@return @H_301_6@false; } } @H_301_6@public @H_301_6@voID closeConnection() { conn.Close(); } @H_301_6@public @H_301_6@voID insertIntotable(@H_301_6@string textToInsert,NpgsqlConnection nsqlConn) { @H_301_6@string MysqLString = "INSERT INTO \"texttable\" (\"content\") VALUES (@Param1)"; @H_301_6@var myParameter = @H_301_6@new NpgsqlParameter("@Param1",NpgsqlDbType.Text); myParameter.Value = textToInsert; openConnection(); @H_301_6@var myCommand = @H_301_6@new NpgsqlCommand(MysqLString,nsqlConn); myCommand.Parameters.Add(myParameter); myCommand.ExecuteNonquery(); closeConnection(); } @H_301_6@public @H_301_6@voID insertIntoAnalysistable(@H_301_6@string textToInsert,NpgsqlConnection nsqlConn) { @H_301_6@string dateTime = DateTime.Now.ToString(); @H_301_6@string[] temp; temp = dateTime.Split(' '); @H_301_6@string MysqLString = "INSERT INTO \"analysistable\" (\"searchedtext\",\"dateofsearch\",\"timeofsearch\") VALUES ('" + textToInsert + "','" + temp[0] + "'" + ",'" + temp[1] + "');"; openConnection(); @H_301_6@var myCommand = @H_301_6@new NpgsqlCommand(MysqLString,nsqlConn); myCommand.ExecuteNonquery(); closeConnection(); } @H_301_6@public @H_301_6@voID executequery(@H_301_6@string queryText,NpgsqlConnection nsqlConn) { openConnection(); @H_301_6@var myCommand = @H_301_6@new NpgsqlCommand(queryText,nsqlConn); myCommand.ExecuteNonquery(); closeConnection(); } @H_301_6@public @H_301_6@voID createTemptable(NpgsqlConnection nsqlConn,@H_301_6@char analysisType,@H_301_6@string dateFrom,@H_301_6@string dateto,@H_301_6@string splitMe) { @H_301_6@if (analysisType == 'H') { @H_301_6@string dropIfExists = "DROP table IF EXISTS \"sat\";"; @H_301_6@string createTemptable = "CREATE table IF NOT EXISTS \"sat\" (rbrSata INT);"; @H_301_6@string insertIntoTemptable = ""; @H_301_6@for (@H_301_6@int i = 0; i < 24; i++) { insertIntoTemptable += "INSERT INTO \"sat\" VALUES (" + i + ");"; } openConnection(); @H_301_6@var commandDrop = @H_301_6@new NpgsqlCommand(dropIfExists,nsqlConn); commandDrop.ExecuteNonquery(); @H_301_6@var commandCreate = @H_301_6@new NpgsqlCommand(createTemptable,nsqlConn); commandCreate.ExecuteNonquery(); @H_301_6@var commandInsert = @H_301_6@new NpgsqlCommand(insertIntoTemptable,nsqlConn); commandInsert.ExecuteNonquery(); closeConnection(); } @H_301_6@else @H_301_6@if (analysisType == 'D') { @H_301_6@string dropIfExists = "DROP table IF EXISTS \"dan\";"; @H_301_6@string createTemptable = "CREATE table IF NOT EXISTS \"dan\" (rbrDana INT);"; @H_301_6@string insertIntoTemptable = splitMe; openConnection(); @H_301_6@var commandDrop = @H_301_6@new NpgsqlCommand(dropIfExists,nsqlConn); commandInsert.ExecuteNonquery(); closeConnection(); } } }}PostGresql sql脚本:
@H_301_6@CREATE @H_301_6@table @H_301_6@public.analysistable ( ID @H_301_6@integer @H_301_6@NOT @H_301_6@NulL @H_301_6@DEFAulT nextval('analysistable_ID_seq'::regclass),searchedtext text @H_301_6@ColLATE pg_catalog."default" @H_301_6@NOT @H_301_6@NulL,dateofsearch @H_301_6@date @H_301_6@NOT @H_301_6@NulL,timeofsearch @H_301_6@time without @H_301_6@time @H_301_6@zone @H_301_6@NOT @H_301_6@NulL,@H_301_6@CONSTRAINT analysistable_pkey @H_301_6@PRIMARY @H_301_6@KEY (ID) ) @H_301_6@WITH ( OIDS = @H_301_6@FALSE ) tableSPACE pg_default;@H_301_6@ALTER @H_301_6@table @H_301_6@public.analysistable OWNER @H_301_6@to king;
@H_301_6@CREATE @H_301_6@table @H_301_6@public.texttable ( ID @H_301_6@integer @H_301_6@NOT @H_301_6@NulL @H_301_6@DEFAulT nextval('texttable_ID_seq'::regclass),content text @H_301_6@ColLATE pg_catalog."default" @H_301_6@NOT @H_301_6@NulL,@H_301_6@CONSTRAINT texttable_pkey @H_301_6@PRIMARY @H_301_6@KEY (ID) ) @H_301_6@WITH ( OIDS = @H_301_6@FALSE ) tableSPACE pg_default;@H_301_6@ALTER @H_301_6@table @H_301_6@public.texttable OWNER @H_301_6@to king;运行结果如图: 总结
以上是内存溢出为你收集整理的使用PostGreSQL数据库进行text录入和text检索全部内容,希望文章能够帮你解决使用PostGreSQL数据库进行text录入和text检索所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)