我有一个很好的任务,就是如何处理大型文件被加载到我们应用程序的脚本编辑器中(就像我们用于快速宏的内部产品的VBA一样).大多数文件大约300-400 KB,这是很好的加载.但是当它们超过100 MB时,这个过程很难(正如你所期望的那样).
发生的事情是将文件读取并推入RichTextBox然后导航 - 不要过于担心这部分.
编写初始代码的开发人员只是使用StreamReader并且正在执行
[Reader].ReadToEnd()
Run Code Online (Sandbox Code Playgroud)
这可能需要很长时间才能完成.
我的任务是打破这段代码,将其以块的形式读入缓冲区并显示一个带有取消选项的进度条.
一些假设:
现在提问:
这些(在您的专业意见中)是好主意吗?我过去曾经有一些问题从Streams读取内容,因为它总会错过最后几个字节或者其他东西,但如果是这样的话,我会问另一个问题.
我的项目中有以下模型
public class Category
{
public Guid ID { get; set; }
[Required(ErrorMessage = "Title cannot be empty")]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而我正在尝试制作一个Title独特的密钥,我搜索解决方案,但找不到任何.可以建议我怎么做,拜托?
我有一个非常简单的C#命令shell应用程序,它执行SQL Server生成的sql脚本,用于脚本架构和数据.它正在吹嘘"GO"声明.错误信息:
'GO'附近的语法不正确.
这是完整的sql脚本:
/****** Object: Table [gym].[MembershipStatus] Script Date: 9/3/2013 9:24:01 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [gym].[MembershipStatus](
[MembershipStatusID] [tinyint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](75) NOT NULL,
[Description] [varchar](400) NOT NULL,
[AllowCheckin] [bit] NOT NULL,
[IncludeInCollections] [bit] NOT NULL,
[ScheduleFutureInvoices] [bit] NOT NULL,
CONSTRAINT [MembershipStatus_PK] PRIMARY KEY CLUSTERED
(
[MembershipStatusID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] …Run Code Online (Sandbox Code Playgroud) 我似乎无法执行使用DbCommand对象创建数据库的SQL.我究竟做错了什么?这是我的代码:
DbConnection connection; // initialized and opened elsewhere
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
这是错误:
查询语法无效.,在术语'/',第1行,第2列附近.说明:在执行当前Web请求期间发生了未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.Data.EntitySqlException:查询语法无效.,在术语'/',第1行,第2列附近.
这是文件的第一部分.仅针对第一行的注释抛出异常:
/****** Object: Table [dbo].[User] Script Date: 10/08/2009 12:14:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NULL,
[LastName] [nvarchar](50) NULL,
[EmailAddress] [nvarchar](100) NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] …Run Code Online (Sandbox Code Playgroud) 我正在编写(在C#中)一个简单的解析器来处理一个看起来很像经典C的脚本语言.
在我拥有的一个脚本文件中,我用来识别/*阻止注释*/的正则表达式将进入某种无限循环,占用100%的CPU.
我正在使用的正则表达式是这样的:
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
Run Code Online (Sandbox Code Playgroud)
有关为什么会被锁定的任何建议?
或者,我可以使用的另一个正则表达式是什么?
更多信息:
RegexOptions.Multiline和 RegexOptions.IgnorePatternWhitespace;我正在尝试构建一个程序,它在批处理中执行sql语句并进行错误处理(因此我没有使用SMO).
问题是GO不是SQL的一部分,当使用.NET执行语句时,它最终会出现错误(SMO会处理它,但不会指示执行是否失败).
string statements = File.ReadAllText("c:\\test.sql");
string[] splitted = statements.split("GO");
Run Code Online (Sandbox Code Playgroud)
使用上面的行不能解决我的问题,因为GO关键字也可以进入注释(我不想从语句中删除注释)并且注释可以进入/**/或在两个破折号之后-
例如,我不希望解析以下代码:
/*
GO
*/
Run Code Online (Sandbox Code Playgroud)
(ofc我谷歌搜索它,但那里没有解决方案)
我在程序中运行 SQL 脚本时遇到问题。这是程序的代码
string databaseName = "TestDB";
Server srv1 = new Server(@"TestServer/ABCUser"); // connects to default instance
srv1.ConnectionContext.LoginSecure = false; // set to true for Windows Authentication
srv1.ConnectionContext.Login = "sa";
srv1.ConnectionContext.Password = "abcde123*";
try
{
Console.WriteLine(srv1.Information.Version); // connection is established
if(srv1.Databases[databaseName] == null)
{
Microsoft.SqlServer.Management.Smo.Database db;
db = new Microsoft.SqlServer.Management.Smo.Database(srv1, databaseName);
db.Create();
db = srv1.Databases[databaseName];
Console.WriteLine(db.CreateDate);
}
else
{
Console.WriteLine("DB Already Exists!");
}
string sqlScript = File.ReadAllText(@"D:\Projects\TrainingProject\src\TrainingDatabase\Scripts\Tables\Script01-table.sql");
Console.WriteLine(sqlScript);
srv1.ConnectionContext.ExecuteNonQuery(sqlScript);
}
catch (ConnectionFailureException e)
{
Console.WriteLine("Error in connecting to the sql …Run Code Online (Sandbox Code Playgroud) 我想要将150 MB的文本文件加载到字符串中.该文件是UTF16编码的,因此它将生成一个内存大约150 MB的字符串.我尝试过的所有方法都会导致Out of Memory异常.
我知道这是一个巨大的字符串,当然不是我想做的事情.但是,目前我无能为力,没有对应用程序进行大量深刻更改即将出门.该文件中没有均匀分布的行集.一行可以包含整个文件大小的80%左右.
这是我尝试过的:
方法1
// Both of these throw Out of Memory exception
var s = File.ReadAllText(path)
var s = File.ReadAllText(path, Encoding.Unicode);
Run Code Online (Sandbox Code Playgroud)
方法2
var sb = new StringBuilder();
// I've also tried a few other iterations on this with other types of streams
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
string line;
while ((line = sr.ReadLine()) != null)
{
sb.AppendLine(line);
}
} …Run Code Online (Sandbox Code Playgroud) 我一直在尝试从 dotnet (C#) 执行 sql 脚本,但 sql 脚本可能包含 GO 语句,我希望能够将脚本集合包装在事务中。
我发现了这个问题,接受的答案让我开始处理 GO 语句,但是如果我使用 BeginTransaction,它会在“new ServerConnection”行抛出InvalidOperationException 。
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlTransaction transaction = connection.BeginTransaction(transactionName);
ServerConnection serverConnection = new ServerConnection(connection);
Run Code Online (Sandbox Code Playgroud)
我正在 SQL 2005 服务器上运行它。
题:
任何人都可以给我一个可以从SQL语句中删除单行注释的正则表达式(C#/ VB.NET)吗?
我的意思是这些评论:
-- This is a comment
Run Code Online (Sandbox Code Playgroud)
不是那些
/* this is a comment */
Run Code Online (Sandbox Code Playgroud)
因为我已经可以处理明星评论了.
我有一个小的解析器,当它们在行的开头时删除那些注释,但是它们也可以在代码之后的某个地方或者更坏的情况下,在SQL字符串中'hello --Test -- World'
也应该删除那些注释(除了SQL字符串中的那些注释)当然 - 如果可能的话).
令人惊讶的是我没有使用正则表达式.我会认为明星评论更难,但实际上,他们不是.
根据请求,这里我的代码删除/**/ - 样式注释(为了让它忽略SQL样式字符串,你必须用uniqueidentifier替换字符串(我使用4个标准),然后应用注释删除,然后应用string-backsubstitution.
static string RemoveCstyleComments(string strInput)
{
string strPattern = @"/[*][\w\d\s]+[*]/";
//strPattern = @"/\*.*?\*/"; // Doesn't work
//strPattern = "/\\*.*?\\*/"; // Doesn't work
//strPattern = @"/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ "; // Doesn't work
//strPattern = @"/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ "; // Doesn't work
// http://stackoverflow.com/questions/462843/improving-fixing-a-regex-for-c-style-block-comments
strPattern = @"/\*(?>(?:(?>[^*]+)|\*(?!/))*)\*/"; // Works !
string strOutput = System.Text.RegularExpressions.Regex.Replace(strInput, strPattern, string.Empty, System.Text.RegularExpressions.RegexOptions.Multiline);
Console.WriteLine(strOutput); …Run Code Online (Sandbox Code Playgroud) 这很好用:
Query = 'SELECT * from table_1 where code = :value; ';
Run Code Online (Sandbox Code Playgroud)
我然后尝试使用LIKE语句,它说它无法找到参数VALUE在这种情况下:
Query = 'SELECT * from table_1 where code LIKE ''%:value;%''';
Param := ADOQuery1.Parameters.ParamByName('value');
Param.DataType := ftString;
Param.Value := 'bob';
Run Code Online (Sandbox Code Playgroud)
我想使用反斜杠来忽略引号,因为它适用于大多数语言,但看起来它在Delphi中不起作用.
c# ×9
.net ×5
sql ×4
sql-server ×3
regex ×2
ado.net ×1
c ×1
comments ×1
database ×1
delphi ×1
large-files ×1
parsing ×1
smo ×1
stream ×1
streamreader ×1
string ×1
transactions ×1
unique-key ×1
vb.net ×1