小编Bra*_*ndi的帖子

Visual Studio - 调试与发布

我在VS 2008中构建了一个针对.NET 2.0的Windows服务.我将其作为控制台应用程序运行以进行调试.

控制台应用程序运行良好.我把它放在我的本地计算机上作为服务,在调试模式下编译,仍然工作得很好.我已准备好立即发布,突然,当我将其设置为发布模式时,服务会编译并安装,但没有任何反应.(根本没有运行中的代码).

我意识到发布与调试模式是属性配置设置,但似乎在发布模式下,即使我检查定义DEBUG常量,取消选中Optimize代码,并将Debug info设置为'full',它仍然无效.

将它设置回调试,它再次像魅力一样工作.

(作为旁注,我尝试将目标框架重置为3.5,以确保不是问题)

所以我的问题(按重要性排序)是这些:

  1. 将以任何方式使用我的"调试"版本会导致任何问题吗?

  2. 除了我已经尝试改变的三个设置之外,调试和发布之间的设置有何不同?

  3. 这对我来说似乎是一个奇怪的错误,并激起了我的好奇心.知道是什么会导致这个吗?

编辑:应该提一下,我已经在使用自定义安装程序.基本上我编译程序(在调试或发布中),然后使用相应的安装程序安装它.

c# windows-services release properties visual-studio

15
推荐指数
1
解决办法
9789
查看次数

SQL - 使用左连接分组

我有两张桌子.表A列出了员工姓名.表B是一个复杂的表格,其中包含员工拨打电话的信息.

我的目标是创建一个包含列'name'和'callCount'的表.我的目标是通过'左连接'和'组合'来做到这一点,但我一直想念那些没有打电话的员工.我怎样才能让它保持名称并在那里放零?

也许我很亲密,有人可以指出我的拼写错误?在此先感谢您的帮助,这是SQL:

SELECT A.name, COUNT(B.call_id) AS 'outgoing call count' 
FROM EmployeeTable A 
LEFT JOIN CallTable B 
ON A.name = B.call_from_name
WHERE B.call_type LIKE 'outgoing' 
AND B.voice_mail = '0' 
...
GROUP BY A.name 
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server join

12
推荐指数
1
解决办法
7万
查看次数

PrinterSettings.GetHdevmode()有错误吗?

我希望能够在不打开打印机属性窗口的情况下更改打印机属性...

到目前为止,使用DocumentProperties(从winspool.drv导入)函数失败了,因为虽然很容易抑制对话框显示,但似乎PrinterSettings.GetHdevmode()返回的值不反映调用它的PrinterSettings ,而是之前打印机属性的值返回OK.例如,这给了我上次调用属性的先前(错误)值,而不是它应该来自PrinterSettings对象的值:

IntPtr hdevmode = PrinterSettings.GetHdevmode(PrinterSettings.DefaultPageSettings);
PrinterSettings.SetHdevmode(hdevmode);
PrinterSettings.DefaultPageSettings.SetHdevmode(hdevmode);
Run Code Online (Sandbox Code Playgroud)

那么GetHdevmode有一个bug还是它应该做的呢?有没有C#可以解决这个问题,还是有人甚至没有任何相关信息?我甚至很难找到关于这个主题的信息.

提前感谢您的任何见解.

编辑:我不想让这个问题太个人化,但希望在这种情况下拥有所有信息可以提供一个对其他人也是有用的解决方案的答案.

这是我编写的C++ DLL,以便为此问题找到解决方法.它目前没有工作 - 它改变了其他内存,如副本,并没有成功改变"底层"纸张大小.我认为我需要做的就是指定out缓冲区标志以进行更改?

extern "C" __declspec(dllexport) DEVMODE* __stdcall GetRealHDevMode(int width, int height, char *printerName, DEVMODE* inDevMode)
    {
//declare handles and variables
HANDLE printerHandle;
LPHANDLE printerHandlePointer(&printerHandle);

//get printer handle pointer
OpenPrinter((LPWSTR)printerName, printerHandlePointer, NULL);

//Get size needed for public and private devmode data and declare devmode structure
size_t devmodeSize = DocumentProperties(NULL, printerHandle, (LPWSTR)printerName, NULL, NULL, 0);
DEVMODE* devmode = reinterpret_cast<DEVMODE*>(new char[devmodeSize + sizeof(DEVMODE) + sizeof(inDevMode->dmDriverExtra)]);

//lock memory
GlobalLock(devmode);

//fill …
Run Code Online (Sandbox Code Playgroud)

c# printing printer-properties

8
推荐指数
1
解决办法
2650
查看次数

使用ASP.NET中的后台工作程序和AJAX

我需要执行一个后台任务,其中包含一个显示完成百分比的进度条和一个取消按钮.除了任务细节之外,目前我只想得到一个实例,所以我只有三个主要的事件处理程序(DoWork,ProgressChanged和RunWorkerCompleted)和一个循环,只是增加一个计数器并在DoWork中休眠50ms.但是,除了最后一次之外它不会更新.

在Windows窗体中,我使用后台工作程序,它正常运行,没有任何问题.我想使用相同的代码.但是,我一直在看一些说ASP.NET必须使用AJAX来获得相同功能的东西.所以我的问题是:

1)我真的需要AJAX来使用后台工作者吗?

2)如果是的话,我确实需要AJAX,那些不了解AJAX的人可以做的最简单,最简单的方法是让后台工作者在ASP.NET网页上运行?

3)如果不是,我不需要AJAX,有人能指出我不使用它的工作样本吗?即使它使用其他线程方法而不是后台工作者,我感兴趣.

对不起多部分问题!如果你能回答其中一个,我们将不胜感激.我真的不介意我最终使用哪种方法,只要它有效.

代码来自.cs页面:

 protected void bwProcess_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 { 
     lblProgress.Text = "Task Complete: " + e.Result;
 }

 protected void bwProcess_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     lblProgress.Text = e.ProgressPercentage.ToString();
 }

 protected void bwProcess_DoWork(object sender, DoWorkEventArgs e)
 {
     for (int i = 0; i <= 100; i++)
     {
         if (bwProcess.CancellationPending)
         {
             lblProgress.Text = "Task Cancelled.";
             e.Cancel = true;
             return;
         }
         bwProcess.ReportProgress(i);
         Thread.Sleep(50);
     }
     e.Result = "100%";
}

protected void BWClick(object sender, EventArgs e)
{ …
Run Code Online (Sandbox Code Playgroud)

asp.net ajax asynchronous backgroundworker

8
推荐指数
1
解决办法
1万
查看次数

C#中的PrintableArea - Bug?

我在使用PageSettings.PrintableArea的宽度和高度值时出现问题."宽度","高度"和"大小"属性声称"获取或设置"值.此外,inflate()函数声称根据传入的值更改大小.

但是,所有这些改变价值的尝试都没有奏效.Inflate()被忽略(没有错误,只是传递就像它工作,但值保持不变.

尝试设置高度,宽度或大小会产生编译器错误:"无法修改'System.Drawing.Printing.PageSettings.PrintableArea'的返回值,因为它不是变量".

我觉得这意味着描述的"或设定"部分是谎言.

为什么我想知道这个:(有人总是问...)我有一个打印应用程序(C#,WinForm),对于大多数事情来说工作得相当好.我可以设置打印机设置和页面设置对象来控制打印对话框的打印机属性中显示的内容.但是,使用Microsoft Office Document Image Writer时,这些设置有时会被忽略,即使显示其他内容,纸张大小也会返回0,0.所有我真的希望它是所见即所得到的显示值,所以我将纸张尺寸改回原来应该是,但可打印区域,如果它是错误的,使得结果图像不稳定.生成的图像是可打印区域的大小,而不是paperize中的值.只是想知道是否有理由这样或者不让它做到这一点.

提前致谢.:)

更新:

  //ignored 
  PrintDocument.DefaultPageSettings.PrintableArea.Inflate(XOffset, YOffset);

 //causes compiler error
 PrintDocument.DefaultPageSettings.PrintableArea.Size = new SizeF((float)DimensionsPaperSize.Width, (float)DimensionsPaperSize.Height);
 PrintDocument.DefaultPageSettings.PrintableArea.Height = DimensionsPaperSize.Height;
 PrintDocument.DefaultPageSettings.PrintableArea.Width = DimensionsPaperSize.Width;
Run Code Online (Sandbox Code Playgroud)

更新2:

对于正确打印的我(自定义尺寸)打印机,当我更改PaperSize时,PrintableArea和PageBounds会自动更改以匹配它.当我在MDIW上更改PaperSize时,只有PageBounds会发生变化.我不明白是什么造成的.

结论:

Nobugz做了很好的工作,解释了为什么无法设置PrintableArea(并且通常永远不需要)以及为什么忽略inflate()函数,所以我将其标记为答案.

至于促使我提出这个问题的持续性问题,我仍然不知所措.为了响应'ScaleTranform'建议,PaperSize和Graphics对象已经具有正确的值,因此弄乱这些值可能没有帮助.我怀疑我沿着那条路线做的最多就是将我正确大小的图像调整为我为PrintableArea获取的垃圾值.当明确设置PaperSize无法相应地修改PrintableArea时,我将假设它是与bug相关的行为.

令我感到沮丧的是,我似乎是遇到这个问题的唯一人.至少,到目前为止,我只是观察了MODIW的这种行为.对于任何人的参考,所以尽可能多的信息; 我正在运行32位Win7,在VS2008中开发.要复制问题,请执行以下步骤:

PrintDialog PrintDlg = new PrintDialog();
PrintDocument PrintDoc = new PrintDocument();
PrintDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(DocumentPrintPage);
PrintDlg.PrinterSettings.PrinterName = printerName; //MODIW
PrintDoc = AlterPaperSize(PrintDoc); //A function that just changes the papersize
PrintDlg.Document = PrintDoc;
PrintDlg.PrinterSettings = PrintDoc.PrinterSettings;
if (PrintDlg.ShowDialog() == DialogResult.OK)
{
   if ((PrintDoc.DefaultPageSettings.PaperSize.Width == 0) &&
       (PrintDoc.DefaultPageSettings.PaperSize.Height …
Run Code Online (Sandbox Code Playgroud)

c# printing system.printing winforms

5
推荐指数
1
解决办法
5763
查看次数

从c#应用程序加密

情况:我需要在我的远程数据库和我的c#应用程序之间进行加密.我不知道我在做什么(之前从未做过任何加密),我在网上找到的所有东西都是针对asp.net并处理了web.config文件.

一些相关数据:我的连接字符串包含SQL Server身份验证的密码信息,有一个select和一个delete语句.这三件事需要加密.

我正在使用SQL Server 2008,Visual Studio 2008和C#.

我怀疑这是否相关,但这是在Windows服务中发生的.到目前为止,在winForms中运行的任何SQL相关都在我的服务中起作用,因此任何与winForms相关的帮助也是值得赞赏的.

我需要什么帮助:

  1. 任何不限于asp.net的加密参考都将非常感激.:)

  2. 我看到MSDN页面,它似乎是一个体面的起点,但我有点困惑.看起来这是2个应用程序相互发送文件的方式,而不是将加密的内容发送到SQL Server?使用这个,我不知道SQL Server如何知道如何解密它?

  3. 我是否可以在左侧视野中寻找System.Security.Cryptography?有没有办法在System.Data.SqlClient中指定加密,或者我不得不诉诸于在远程服务器上制作存储过程?

先感谢您!!!:)

摘要:

谢谢大家让我走上正确的道路,很难选择一个答案!:)

我已经得出结论,我需要使用SSL,虽然我对how-tos有很多疑惑,但我知道这需要一个证书,并且一旦证书设置完毕,客户端就可以通过询问来请求加密对于连接字符串中的"Encrypt = yes".幸运的是,我相信我已经有了一个我可以使用的.

还有一点需要注意 - TDE是关于加密数据的好消息,这些数据只是位于数据库中,而SSL则是用于传输加密数据的内容.

以下是我发现最有帮助的几个链接:

http://blogs.msdn.com/b/sql_protocols/archive/2005/10/04/476705.aspx

http://support.microsoft.com/default.aspx?scid=kb;en-us;316898

c# sql sql-server encryption public-key

4
推荐指数
2
解决办法
5467
查看次数

删除触发器仅在删除后触发?

我认为"删除后"意味着在删除已经发生之前触发器才会被触发,但这是我的情况......

在C#中删除触发器后,我创建了3个几乎相同的SQL CLR,它工作了大约一个月.突然,三个中的一个停止工作,同时在其上运行自动删除工具.

通过停止工作,我的意思是,无法通过客户端软件从表中删除记录.禁用触发器会导致删除,但重新启用它会干扰删除功能.

所以我的问题是"这怎么可能呢?" 它上面使用的工具是否有可能在记忆中充满活力?似乎即使触发器抛出异常,如果它是删除后,记录不应该消失?

所有触发器看起来都是这样的:

ALTER TRIGGER [sysdba].[AccountTrigger] ON [sysdba].[ACCOUNT]  AFTER  DELETE AS 
EXTERNAL NAME [SQL_IO].[SQL_IO.WriteFunctions].[AccountTrigger]
GO
Run Code Online (Sandbox Code Playgroud)

CLR触发器执行一次选择,一次插入另一个数据库.我还不知道SQL Server Mgmt Studio是否有任何错误,但在我发现之后会更新问题.

更新:

在重新执行上面相同的触发器代码之后,一切都再次起作用,所以我可能永远不知道SSMS会给出什么错误.

此外,在触发器代码中的任何位置都没有调用回滚.

sql t-sql sql-server sqlclr sql-server-2008

1
推荐指数
1
解决办法
7380
查看次数