C# 怎样从文本提取SQL文,跳过注释
发布网友
发布时间:2022-04-16 00:21
我来回答
共3个回答
热心网友
时间:2022-04-16 01:50
给你一个函数,这是我以前写的一个从文件中取SQL文,也是MySql的
但是因为文件中有可能会有多个SQL文,所以里面判断“;”为一条语句结束,返回SQL文的字符串数组。你要只有一条SQL文的话,改一下就可以用了
private string[] GetSqlList()
{
StreamReader objReader = new StreamReader("Insert.sql", Encoding.UTF8);
string sLine = string.Empty;
StringBuilder objStringBuilder = new StringBuilder();
while (sLine != null)
{
sLine = objReader.ReadLine();
if (!string.IsNullOrEmpty(sLine))
objStringBuilder.Append(sLine + "\n");
}
objReader.Close();
string strSQL = objStringBuilder.ToString();
if (string.IsNullOrEmpty(strSQL))
{
return new string[] { };
}
int i = 0;
ArrayList arrSql = new ArrayList();
string strTempSql = string.Empty;
//取得注释以外的有効SQL文
while (i < strSQL.Length)
{
bool bolIsBreak = false;
switch (strSQL.Substring(i, 1))
{
case "`":
int intPosition = strSQL.IndexOf(strSQL.Substring(i, 1), i);
if (intPosition == -1)
{
strTempSql += strSQL.Substring(i);
bolIsBreak = true;
}
else
{
strTempSql += strSQL.Substring(i, intPosition - i + 1);
i = intPosition;
}
break;
case "'":
goto case "`";
case "\"":
goto case "`";
case "/":
if (strSQL.Length > i + 1 && strSQL.Substring(i, 2).Equals("/*"))
{
i = strSQL.IndexOf("*/", i);
if (i == -1)
{
bolIsBreak = true;
}
i++;
}
else
{
strTempSql += strSQL.Substring(i, 1);
}
break;
case "-":
//--
if (strSQL.Length > i + 1 && strSQL.Substring(i, 2).Equals("--"))
{
i = strSQL.IndexOf("\n", i);
if (i == -1)
{
bolIsBreak = true;
}
}
else
{
strTempSql += strSQL.Substring(i, 1);
}
break;
case ";":
strTempSql = strTempSql.TrimStart('\n');
if (!string.IsNullOrEmpty(strTempSql))
{
arrSql.Add(strTempSql);
}
strTempSql = string.Empty;
break;
default:
strTempSql += strSQL.Substring(i, 1);
break;
}
if (bolIsBreak)
{
break;
}
i++;
}
strTempSql = strTempSql.TrimStart('\n');
if (!string.IsNullOrEmpty(strTempSql))
{
arrSql.Add(strTempSql);
}
string[] lstSql = new string[arrSql.Count];
for (i = 0; i < arrSql.Count; i++)
{
lstSql[i] = arrSql[i].ToString();
}
return lstSql;
}
热心网友
时间:2022-04-16 03:08
一般来说,读取每一行,如果开头是--就可以认为是注释,
如果串中包含/*就认为是多行注释的开始,直到遇到*/。
还有一种情况很复杂,需要判断/* */是否在字符串中
insert tab1('/*..*/', ...)
上面这句话中的/* */是不能当作注释的,因为在字符串中。
所以还需要判断注释是否在字符串中, 也就是检测单引号"'"。
过程相当复杂。
热心网友
时间:2022-04-16 04:43
如果用正则表达式,代码更短
/// <summary>
/// 为//和/**/类型的注释着色
/// </summary>
/// <param name="src">输入源码</param>
/// <returns>格式化后的源码</returns>
private string ColorBasicComment(string src)
{
string retCode = src;
Regex r1 = new Regex(@"(^|;)([ \t]*)(//.*$)", RegexOptions.Multiline);
retCode = r1.Replace(retCode, "$1$2<span [CSS_COMMENT]>$3</span>");
Regex r2 = new Regex(@"(^|[ \t]+)(/\*[^\*/]*\*/[ \t\r]*$)", RegexOptions.Multiline);
retCode = r2.Replace(retCode, new MatchEvaluator(this.ColorBasicComment2Evaluator));
return retCode;
}
c#快速把txt文件导入sql
使用文件流FileStream来打开txt文件,使用读取器streamreader来读取内容拼接sql语句,将读取的内容填充到sql语句中,调用方法写入到数据库
C#代码实现从文件中读出数据在导入到数据库
//定义数据连接字符串 private string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; /// /// 用insert方法从文本文件中批量导入到数据库表中 /// /// /// private void btnInsert_Click(object sender, RoutedEventArgs e) { Ope...
C#将文本框的字符串存入SQL数据库中,先来个简单点的,谢谢,学到数据库就...
这个首先你需要建好数据表,连接数据库然后执行如下格式SQL语句 INSERT INTO [表名](列名1,列名2)VALUES('" + txt_model.Text + "','" + txt_client.Text + "')
C#怎么把文本框中的数据写到SQL数据库中
写一个 string sql="insert into table values('"+TextBox1.Text+"')";调用下面方法,如果返回 1 证明已经添加进去 public static int ExecuteCommand(string safeSql){ SqlCommand cmd = new SqlCommand();SqlConnection conn = new SqlConnection(connectionStrings);try { PrepareCommand(cmd, con...
C#如何把一个文件的内容写到SQL Server数据库里
FileInfo[] ff = di.GetFiles("*.txt");//只取文本文档 string ss = "";//存放内容 foreach (FileInfo temp in ff){ using (StreamReader sr = temp.OpenText()){ ss += sr.ReadToEnd();//内容追加到ss中 } } File.AppendAllText("要保存的文件路径", ss);//保存到一个文件里 如...
c#中怎么实现在文本框中输入一条信息,并且通过点击同一个按钮查询两个...
将sql语句及后面的判断产品名称,名字部分封装为一方法,方法前判断输入框中的内容,然后用这内容来拼接from 表名 我新人,如有不到,还请见谅
请问怎么把C#文本框里的文字和SQL里的数据互相匹配?
若此列是数值类型,则SQL语句是:select * from 表名 where 列名 = 文本框值若此列是字符类型,则SQL语句是:select * from 表名 where 列名 like '%文本框值%'
C#中使用SQL语句,SQL语句中含有汉字时,应怎样处理?
没关系;字符串, 用 ' ' 单引号引起来就好了
怎么把txt导入sql数据库c#代码。按字节读取格式化的txt文本,比如A=B...
{ string[] data=str.spilte('=');FT+=FT==string.empty?data[0]:","+data[0];FV+=FV==string.empty?"'"+data[1]+"'":",'"+data[1]+"'";} } IF(FT!=string.empty&&FV!=string.empty)string sql=string.formate("insert into table ({0}) values ({1})",FT,FV);...
C#怎么用@符写SQL代码,不用+=连,因为涉及到GO,用@的话文本框的内容要...
string insert =String.Format(@"INSERT INTO [AviationAccidentDatabase].[dbo].[AirportInformation]([Airport_PKID],[AirportName],[ThreeCode],[ICAOCode])VALUES(newid(),'{0}','{1}','{2}') Go",textBoxDeparture.Text ,textBoxDepT.Text , textBoxDepF.Text) ;...