可能是一个容易回答的问题.我有这个程序:
CREATE PROCEDURE [dbo].[AccountExists]
@UserName nvarchar(16)
AS
IF EXISTS (SELECT Id FROM Account WHERE UserName=@UserName)
SELECT 1
ELSE SELECT 0
Run Code Online (Sandbox Code Playgroud)
当我有调用此过程的ADO.NET代码并执行此操作时:
return Convert.ToBoolean(sproc.ExecuteScalar());
Run Code Online (Sandbox Code Playgroud)
返回true或false.
当我将存储过程更改为RETURN 1或0而不是SELECT时:
ALTER PROCEDURE [dbo].[AccountExists]
@UserName nvarchar(16)
AS
IF EXISTS (SELECT Id FROM Account WHERE UserName=@UserName)
RETURN 1
ELSE RETURN 0
Run Code Online (Sandbox Code Playgroud)
sproc.ExecuteScalar()返回null.如果我尝试使用sproc.ExecuteNonQuery(),则返回-1.
如何在ADO.NET中使用RETURN获取存储过程的结果?
我需要AccountExists来RETURN而不是SELECT,所以我可以让另一个存储过程调用它:
--another procedure to insert or update account
DECLARE @exists bit
EXEC @exists = [dbo].[AccountExists] @UserName
IF @exists=1
--update account
ELSE
--insert acocunt
Run Code Online (Sandbox Code Playgroud) 我有一个用.NET 3.5编写的应用程序,它使用FTP从服务器上传/下载文件.该应用程序工作正常,但存在性能问题:
连接FTP服务器需要花费大量时间.FTP服务器位于不同的网络上,并具有Windows 2003 Server(IIS FTP).当多个文件排队等待上传时,从一个文件到另一个文件的更改会使用FTPWebRequest创建一个新连接,并且需要花费很多时间(大约8-10秒).
有可能重新使用连接吗?我不太确定KeepAlive属性.哪些连接保持活跃并重用.
Windows Server 2003上的IIS-FTP不支持SSL,因此任何人都可以通过WireShark等数据包嗅探器轻松查看用户名/密码.我发现如果IIS 7.0,Windows Server 2008在其新版本中支持基于FTP的SSL.
我基本上想要提高我的应用程序的上传/下载性能.任何想法将不胜感激.
**请注意3不是问题,但我希望人们对此发表评论
我正在编写一个自定义工具,我目前正在做我想要的功能.如果出现问题,我希望能够写入Visual Studio.(代码格式不正确或其他).
这有什么标准吗?现在我基本上可以强制该工具失败,Visual Studio会发出警告,表明它已经这样做了.我想在"输出"窗口中输入一个类别,其中包含我要发送的任何结果消息.我还可以在错误列表窗口中使用更具描述性的任务/警告.
我正在预先打包一个JSP web-app,它依赖于web.xml中的一些文件路径设置.这些设置在打包时是未知的,因为它们引用了客户在部署整个应用程序时设置的路径(其中web-app是管理界面).
似乎在我的安装程序脚本中避免令牌和文件修改的最简单方法是向用户询问安装位置,将此位置设置为环境变量(例如JAVA_HOME),并让web.xml始终引用该变量.
有没有办法从web.xml中引用环境变量值?Google搜索引出了来自ejb xml文件的SETTING环境变量的J2EE方法.这不是我想要的.
有没有办法使用ELMAH全局处理常规ASP.NET Web服务(asmx)中的异常,就像我们在ASP.NET网站中一样?
我想在C#中进行TCP打孔(NAT Traversal).如果需要,可以使用集合服务器完成.我找到了http://sharpstunt.codeplex.com/但无法让它工作.理想情况下,我需要一些方法,我将一个端口号(int)作为参数,在NAT上调用此方法后可用("Port Forwarded").如果该方法只返回一些后来在NAT上可用的端口号,那也没关系.有没有人用C#做过这个?你能给我一些sharpstunt或其他东西的例子吗?
我的问题在于文件复制性能.我们有一个媒体管理系统,需要在文件系统上大量移动文件到不同的位置,包括同一网络上的Windows共享,FTP站点,AmazonS3等.当我们都在一个Windows网络上时,我们可以使用System.IO.File.Copy(源,目标)复制文件.由于我们所拥有的很多次都是输入流(如MemoryStream),我们尝试抽象复制操作以获取输入流和输出流,但我们看到了大量的性能下降.下面是一些用于复制文件以用作讨论点的代码.
public void Copy(System.IO.Stream inStream, string outputFilePath)
{
int bufferSize = 1024 * 64;
using (FileStream fileStream = new FileStream(outputFilePath, FileMode.OpenOrCreate, FileAccess.Write))
{
int bytesRead = -1;
byte[] bytes = new byte[bufferSize];
while ((bytesRead = inStream.Read(bytes, 0, bufferSize)) > 0)
{
fileStream.Write(bytes, 0, bytesRead);
fileStream.Flush();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这比File.Copy执行速度慢得多?我能做些什么来提高性能吗?我是否只需要使用特殊逻辑来查看我是否从一个窗口位置复制到另一个窗口位置 - 在这种情况下我将只使用File.Copy而在其他情况下我将使用流?
请告诉我您的想法以及是否需要其他信息.我尝试了不同的缓冲区大小,似乎64k缓冲区大小对于我们的"小"文件来说是最佳的,256k +对于我们的"大"文件来说是一个更好的缓冲区大小 - 但无论哪种情况下它都比File.Copy执行得更糟糕( ).提前致谢!
对于我所拥有的各种代码,我厌倦了这样的代码块:
if (dict.ContainsKey[key]) {
dict[key] = value;
}
else {
dict.Add(key,value);
}
Run Code Online (Sandbox Code Playgroud)
和查找(即键 - >值列表)
if (lookup.ContainsKey[key]) {
lookup[key].Add(value);
}
else {
lookup.Add(new List<valuetype>);
lookup[key].Add(value);
}
Run Code Online (Sandbox Code Playgroud)
是否存在另一个集合库或扩展方法,无论键和值类型是什么,我都应该在一行代码中执行此操作?
例如
dict.AddOrUpdate(key,value)
lookup.AddOrUpdate(key,value)
Run Code Online (Sandbox Code Playgroud) 我编写了以下类来实现(或尝试!)带有通知的字典:
public partial class ObservableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, INotifyCollectionChanged
{
public ObservableDictionary() : base() { }
public ObservableDictionary(int capacity) : base(capacity) { }
public ObservableDictionary(IEqualityComparer<TKey> comparer) : base(comparer) { }
public ObservableDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary) { }
public ObservableDictionary(int capacity, IEqualityComparer<TKey> comparer) : base(capacity, comparer) { }
public ObservableDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer) : base(dictionary, comparer) { }
public event NotifyCollectionChangedEventHandler CollectionChanged;
public new TValue this[TKey key]
{
get
{
return base[key];
}
set
{
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, key, …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
ado.net ×1
asmx ×1
asp.net ×1
collections ×1
customtool ×1
dictionary ×1
elmah ×1
ftp ×1
java ×1
nat ×1
performance ×1
sql ×1
t-sql ×1
tcp ×1
vsx ×1
web-services ×1
web.xml ×1
wildcard ×1
windows ×1