我看了一下网站和谷歌,但我似乎无法找到一个很好的解决方案,我正在尝试做什么.
基本上,我有一个客户端服务器应用程序(C#),我向服务器发送一个SQL select语句(连接到SQL Server 2008),并希望以CSV方式将结果返回给客户端.
到目前为止,我有以下内容:
if (sqlDataReader.HasRows)
{
while(sqlDataReader.Read())
{
//not really sure what to put here and if the while should be there!
}
Run Code Online (Sandbox Code Playgroud)
}
不幸的是,我真的很想将C#与SQL连接起来.我需要有关如何简单地将结果放在csv格式的字符串中的任何提示.列和字段可能会有所不同,所以我不能像在一些网站上看到的那样使用某种东西的方法.我不确定我是否可以理解了!
我非常感谢有关如何解决这个问题的任何提示/要点!
只是想找出为以下场景设计表的最佳方法:
我的系统中有几个区域(文档,项目,组和客户端),每个区域都可以记录注释.
我的问题是我应该有这样一个表:
CommentID
DocumentID
ProjectID
GroupID
ClientID
etc
Run Code Online (Sandbox Code Playgroud)
只有一个id会有数据,其余的将是NULL,或者我应该有一个单独的CommentType表,并且我的注释表如下:
CommentID
CommentTypeID
ResourceID (this being the id of the project/doc/client)
etc
Run Code Online (Sandbox Code Playgroud)
我的想法是,从索引的角度来看,选项2会更有效.它是否正确?
我的插入存储过程:
ALTER procedure proj_ins_all
(
@proj_number INT,
@usr_id INT,
@download DATETIME,
@status INT
)
as
INSERT INTO project
(proj_number, usr_id, date_download, status_id)
VALUES
(@proj_number, @usr_id, @download, @status)
select SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
...手动调用时运行正常,如下所示:
exec proj_ins_all 9001210, 2, '2009-09-03', 2
Run Code Online (Sandbox Code Playgroud)
...但是从代码调用时:
_id = data.ExecuteIntScalar("proj_ins_all", arrParams);
Run Code Online (Sandbox Code Playgroud)
......插入不会发生.现在,标识列确实增加了,并且_id 确实设置为它的值.但该行本身从未出现在表格中.
我能想到的最好的猜测是一个插入触发器,它删除了新插入的行,但是表上没有触发器(为什么它会在手动完成时工作呢?).我的其他尝试是围绕猜测存储过程以某种方式回滚插入,因此将开始和结束并且将分号和分号放入存储过程以正确分离"插入"和"身份选择"位.没有修复.
有任何想法吗?
更新:
谢谢所有迄今为止帮助过的人.关于Preet的建议(第一个答案)我学会了如何使用SQL Server Profiler(我简直不敢相信我之前从未了解过它 - 我认为它只对性能调优有用,没有意识到我可以确切地看到查询的内容带它的DB).
它揭示了SqlCommand.ExecuteScalar()方法发送的SQL与我手动运行的SQL略有不同.它发送:
exec proj_ins_all @proj_number=9001810,@usr_id=2,@download='2009-09-03 16:20:11.7130000',@status=2
Run Code Online (Sandbox Code Playgroud)
我手动跑了,瞧!实际的SQL服务器错误(!):
将数据类型varchar转换为datetime时出错.
由于我是手动测试的,我只是将日期时间从'2009-09-03 16:20:11.7130000'缩短为'2009-09-03 16:20:11',这就解决了错误; 现在插入的行很好.
但这引出了一个问题:为什么Microsoft的SQL Server在该datetime参数中不能处理超过23个字符?这是Microsoft的SqlCommand.ExecuteScalar()方法,它构建了这样的查询,而不是我.这是一个问题,因为我的代码仍然不起作用.
一旦我手动工作,我就会看到如何在代码中为日期设置SqlParameter,这样它就会发送一个有效的值.我尝试将数据类型从SqlDbType.DateTime …
我的数据库字段(sql server 2005)使用数字(15,2)定义.
LINQ 2 SQL生成的属性是
[Column(Storage="_My_Property_Name", DbType="Decimal(15,2)", UpdateCheck=UpdateCheck.Never)]
public System.Nullable<decimal> My_Property_Name
{
get
{
return this._My_Property_Name;
}
set
{
if ((this._My_Property_Name != value))
{
this.OnMy_Property_NameChanging(value);
this.SendPropertyChanging();
this._My_Property_Name = value;
this.SendPropertyChanged("My_Property_Name");
this.OnMy_Property_NameChanged();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在调试中我检查此属性的实体值= 23.6363636363(等)
然后我跳过context.SubmitChanges()
我有SQL Profiler运行,这是更新语句.
exec sp_executesql N'
UPDATE [Staging].[My_Table_Name]
SET [LAST_UPDATE_DATE] = @p2, [Field1] = @p3, [Field2] = @p4, [Field3] = @p5, [Field4] = @p6, [Field5] = @p7, [Field6] = @p8, [Field7] = @p9
WHERE ([Id] = @p0) AND ([RecordVersion] = @p1)
SELECT [t1].[RecordVersion] …Run Code Online (Sandbox Code Playgroud) 我有table a和table b.(SQL Server 2008)
两个表都具有完全相同的模式.
出于此问题的目的,请考虑table a=我的本地开发表,table b=实时表.
我需要创建一个SQL脚本(包含UPDATE/DELETE/INSERT语句),它将表b更新为与表a相同.然后,此脚本将部署到实时数据库.
任何可以做到这一点的免费工具,或者更好的方式我自己可以做到这一点?
我想我可能需要在表中的所有字段上进行某种类型的连接,然后根据它生成动态SQL.
有人有主意吗?
编辑
好吧,我想我会澄清一下这个问题.
我需要同步的表是一个简单的查找表.数据非常简单明了.
这是一个TABLE A可能的样子:
IdFoo Activity IsFoo
1 Foo 1
2 Bar 0
Run Code Online (Sandbox Code Playgroud)
这是一个TABLE B可能的样子:
IdFoo Activity IsFoo
1 Foo 1
2 Bar 1
Run Code Online (Sandbox Code Playgroud)
基本上,我想要做的就是更新该BIT列(IsFoo)TABLE B以匹配TABLE A相同IdFoo 的相应值.
记住:
TABLE A 在我的本地机器上TABLE B 在实时服务器上显然我TABLE B在我的本地机器上有一个(可靠的)备份,我需要编写脚本,然后在实时服务器上运行脚本.
该表还具有引用完整性(我未显示的其他列).这意味着我不能只删除所有内容TABLE B并从中进行插入TABLE …
我安装了SQL Server 2005 Express.后来我升级到SQL Server 2008.我对实例知之甚少,但是当我登录SQL Server 2005并登录到SQL Server 2008时,它显示的是相同数量的数据库.此外,当我在SQL Server 2008中创建数据库时,它在SQL Server 2005中显示它.
任何想法如何创建单独的SQL Server 2008实例?
如果可能,请逐步解释.
谢谢
我听说我的团队负责人说,在过去的一些项目中,他们不得不取消规范化,以提高查询速度.
我认为它可能与表联盟有关.
有更多的精益表真的没有脂肪表少吗?
我们有一个运行的应用程序,其中IIS和SQL在同一台机器上.它是一个Windows2003标准服务器,在VM上运行4GB内存.
现在,用户数量不断增加.还有一些巨大的统计数据,可以由用户运行,但对其他用户的性能影响很大.所以我们需要以某种方式提高性能.
我想在每台机器上使用windows2008 64位和至少6 GB内存的2台不同机器上分离IIS和SQL,但它也应该有一个故障转移解决方案.
您能否推荐一些有关如何解决性能和故障转移问题的方案?
谢谢
PS:
仅供参考:我们现在在IIS中使用inproc状态管理,但我认为更改为sqlstatemanagement会更好.
编辑
我已经将问题扩展到了故障转移的程度.因为我们的客户不想在服务器和SQL许可证上花太多钱.将复制到第二个SQL服务器并将其用作故障转移是否"可以"?你知道更好的"廉价"解决方案吗?
该应用程序仅供内部使用,但现在越来越多的部门参与此项目.
如果某些jquery或常规javascript应该内联或单独的js文件中的条件是什么?
每当我打开 SSMS (SQL Server 2012) 时,我都会收到在上一个会话中打开的所有脚本。这包括已保存的查询和任何未保存的查询,这些查询列为SQLQuery1.sql、SQLQuery2.sql等。
我似乎找不到这些“未保存”查询的保存位置。我已经检查过Documents\SQL Server Management Studio\Backup Files\(以及附近的所有其他目录)。我还检查了C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\目录和子目录(尽我所能)。最后,我在计算机上彻底搜索了文件名SQLQuery1.sql,但什么也没找到(并不是说我信任文件资源管理器中的 Windows 搜索功能)。
为了防止事情发生任何变化,我还安装了 SSMS 的 Redgate SQL Prompt 插件。
还有其他建议吗?
谢谢!
sql-server ×8
sql ×4
c# ×2
.net ×1
ado.net ×1
asp.net ×1
asp.net-mvc ×1
database ×1
iis ×1
instance ×1
javascript ×1
jquery ×1
linq-to-sql ×1
oracle ×1
resultset ×1
rounding ×1
sqlcompare ×1
ssms ×1
t-sql ×1
windows ×1