Tag: sql server

如何从VB.net(或C#)调用sqlserver函数? 是否有一些像存储过程的语法?

Public Sub cleanTables(ByVal prOKDel As Short) Dim sqlParams(1) As SqlParameter Dim sqlProcName As String sqlProcName = “db.dbo.sp_mySP” sqlParams(1) = New SqlParameter(“@OKDel”, prOKDel) Try dbConn.SetCommandTimeOut(0) dbConn.ExecuteNonQuery(CommandType.StoredProcedure, sqlProcName, sqlParams) Catch ex As Exception Finally End Try End Sub 在那儿 CommandType.StoredProcedure…CommandType.Function sqlParams(1) = New SqlParameter(“@OKDel”, prOKDel)… 最后是datatable dt = dbConn.Execute(CommandType.StoredProcedure,sqlProcName,sqlParams) 谢谢

从C#删除数据库

我有一个MDF文件,我在使用MSTEST测试期间附加到我的本地SQL服务器,我不想在运行测试集50次后手动删除这些临时数据库。 (我已经这样做了,我不喜欢它。<)我正在寻找一种方法,在我完成测试后,在我的TestCleanup方法中从服务器中删除数据库。 我只需要一些关于我将用来执行此操作的SQL语句的指导。 思考? Thx提前! :d 编辑 (由软件猴子,从OP拒绝编辑到ODED的答案) 这是适合我的代码: var server = new Server(serverName); // Can use overload that specifies foreach (Database db in server.Databases) { if (db.Name.ToLower().Contains(testDatabaseIdentifier)) { databasesToDelete.Add(db.Name); } } databasesToDelete.ForEach(x => { Database db = new Database(server, x); db.Refresh(); db.Drop(); });

tinyint列的生成查询将CAST引入int

我正在查询tinyint列,entity framework生成一个SELECT查询,该查询为此列引入了CAST到INT,即使我在WHERE子句中使用的值是字节类型。 查看模型,我的tinyint列生成的Type是byte。 看代码: byte byteValue = 6; var entityList = from r in rep.DataContext.FooTable where r.TinyintColumn == byteValue select r; 查看生成的查询: SELECT [Extent1].[TinyintColumn] AS [TinyintColumn] WHERE @p__linq__0 = CAST( [Extent1].[TinyintColumn] AS int) 我对性能有严格的限制,所以我不希望任何选择中的那些CAST。 所以我的问题是,有没有办法避免这个CAST超过列tinyint? 或者我做错了什么? 提前致谢。

sqlparameter性能不佳

我有一个Web服务,所以处理程序一直被多次调用。 在里面我创建了SqlConnection和SqlCommand。 我必须执行大约7个不同的命令。 不同的命令需要各种参数,所以我只需添加一次: command.Parameters.Add(new SqlParameter(“@UserID”, userID)); command.Parameters.Add(new SqlParameter(“@AppID”, appID)); command.Parameters.Add(new SqlParameter(“@SID”, SIDInt)); command.Parameters.Add(new SqlParameter(“@Day”, timestamp.Date)); command.Parameters.Add(new SqlParameter(“@TS”, timestamp)); 然后在执行期间我只需更改CommandText prorerty,然后调用ExecuteNonQuery(); 或ExecuteScalar(); 我面临性能问题。 例如,小调试和分析显示该命令 command.CommandText = “SELECT LastShowTS FROM LogForAllTime WHERE UserID = @UserID”; 平均需要大约50毫秒。 如果我将其更改为: command.CommandText = “SELECT LastShowTS FROM LogForAllTime WHERE UserID = ‘” + userID.Replace(“\'”, “”) + “‘”; 然后它只需要1ms的平均值! 我只是无法弄清楚在哪里调查问题。

如何根据rowversion / timestamp值查询Code First实体?

我遇到过一个案例,其中与LINQ to SQL相当不错的东西似乎对Entity Framework来说非常迟钝(或者可能是不可能的)。 具体来说,我有一个包含rowversion属性的实体(用于版本控制和并发控制)。 就像是: public class Foo { [Key] [MaxLength(50)] public string FooId { get; set; } 1541535334 [ConcurrencyCheck] public byte[] Version { get; set; } } 我希望能够将实体作为输入,并找到最近更新的所有其他实体。 就像是: Foo lastFoo = GetSomeFoo(); var recent = MyContext.Foos.Where(f => f.Version > lastFoo.Version); 现在,在数据库中这将起作用:两个rowversion值可以相互比较而没有任何问题。 在使用LINQ to SQL之前我做了类似的事情,它将rowversion映射到System.Data.Linq.Binary ,可以进行比较。 (至少在表达式树可以映射回数据库的程度上。) 但在Code First中,属性的类型必须是byte[] 。 并且两个数组无法与常规比较运算符进行比较。 有没有其他方法来编写LINQ to […]

将Windows Phone 8连接到Sql server

由于我不熟悉Windows Phone 8开发,我想讨论/询问将Windows Phone 8连接到Sql-Server数据库的最佳方法是什么。 我试图通过互联网进行搜索,发现只有少数指南对我使用WebService的 Linq-to-Sql不起作用。 这是我失败的地方。 首先我想显示数据 – 这是最重要的,我还不需要编辑它们。 但将来这是不可避免的。 如果编辑工作,我需要直接在我连接的Sql Server上编辑它们。 我还检查了Sql Server Compact指南,但这只能在CE 4.0 (从Sql Server导出数据到Sql Compact)时才能使用, 它不支持Windows Phone 8 。 但即使它可以工作,它只是简单地将Sql服务器数据库复制到Sql Compact,并且不能直接在Sql Server上使用数据(这是可以理解的,因为它是Sql Server Compact)。 因此,当我深入搜索唯一的方法是使用WebService我在YouTube上按照一些分步指南进行操作但正如我之前提到的那样,问题在于显示数据,因为指南导致我使用ListBox,因为它是Windows Phone 7.1和Windows Phone 8中只有LongListSelector。 我还发现问题将Windows Phone和Windows 8应用程序连接到SQL Server ,这对我来说很安静。 我想我需要一些循序渐进的指导方法。 所以我想问你是否有如何连接WP8和Sql Server的分步指南? 如果有人会这样,并在这里编辑我的代码以使其工作。 感谢您抽出宝贵时间阅读本文和答案/评论。 女士

Force Entity Framework使用SQL参数化来更好地重用SQL proc缓存

entity framework似乎总是在生成的SQL中使用常量来提供给Skip()和Take() 。 在下面的简化示例中: int x = 10; int y = 10; var stuff = context.Users .OrderBy(u => u.Id) .Skip(x) .Take(y) .Select(u => u.Id) .ToList(); x = 20; var stuff2 = context.Users .OrderBy(u => u.Id) .Skip(x) .Take(y) .Select(u => u.Id) .ToList(); 上面的代码生成以下SQL查询: SELECT TOP (10) [Extent1].[Id] AS [Id] FROM ( SELECT [Extent1].[Id] AS [Id], row_number() […]

什么是更新存储过程368次以更新数据库的好方法?

我正在研究一个.NET组件,它从数据库中获取一组数据,对该组数据执行一些业务逻辑,然后通过类似于spUpdateOrderDetailDiscountedItem的存储过程更新数据库中的单个记录。 对于小数据集,这不是问题,但是当我有一个非常大的数据集需要迭代368个存储过程调用来更新数据库中的记录时,我意识到我遇到了问题。 一位高级开发人员查看了我的存储过程代码并说它看起来不错,但现在我想探索一种更好的方法来将“批量”数据发送到数据库。 我有哪些选项可以批量更新数据库? 这可能与存储过程有关吗? 我还有其他选择吗? 我不会选择安装完整的ORM,但任何建议都表示赞赏。 其他背景资料: 我们当前的数据访问模型是在5年前构建的,目前对db的所有调用都是通过模块化/静态函数执行的,其名称类似于ExecQuery和GetDataTable 。 我不确定我是否需要保持在该模型中,但是我必须提供一个非常好的理由来超越我们当前的DAL来获取数据库。 另外值得注意的是,在谈到CRUD操作和数据库时,我还是比较新的。 我更喜欢在.NET代码中玩/工作,但数据必须存储在某个地方,对吧? 存储过程内容: ALTER PROCEDURE [dbo].[spUpdateOrderDetailDiscountedItem] — Add the parameters for the stored procedure here @OrderDetailID decimal = 0, @Discount money = 0, @ExtPrice money = 0, @LineDiscountTypeID int = 0, @OrdersID decimal = 0, @QuantityDiscounted money = 0, @UpdateOrderHeader int = 0, @PromoCode […]

将IPv6格式化为C#中的int并将其存储在SQL Server中

在IPv4我一直在将IP地址的字符串表示解析为Int32 ,并将它们作为INT存储在SQL Server 。 现在,使用IPv6我试图找出是否有一种标准或可接受的方法来使用C#将IPv6的字符串表示解析为两个Int64 ? 人们如何将这些值存储在SQL Server – 作为BIGINT两个字段?

使用C#.Net访问SQL Server数据库的最佳方法

我是.NET的新手,并且已经了解了几种不同的查询SQL Server数据库的方法,例如ADO.NET和entity framework。 任何人都可以给我一些关于新应用程序的最佳方法的建议吗? 感谢您的任何帮助或建议。