小编RRM*_*RRM的帖子

有没有比在开头使用1 = 1更好的方法来动态构建SQL WHERE子句?

我正在用C#构建一些SQL查询.它将根据代码中存储为变量的某些条件而有所不同.

string Query="SELECT * FROM Table1 WHERE 1=1 ";
if (condition1) 
    Query += "AND Col1=0 ";
if (condition2) 
    Query += "AND Col2=1 ";
if (condition3) 
    Query += "AND Col3=2 ";
Run Code Online (Sandbox Code Playgroud)

它有效,但测试1 = 1似乎并不优雅.如果我没有使用它,我必须记住并检查每次是否已经添加"where"关键字到查询.

有更好的解决方案吗?

c# sql

109
推荐指数
9
解决办法
5万
查看次数

遍历表单上的所有控件,甚至是组框中的控件

我想在我的表单上的所有文本框中添加一个事件:

foreach (Control C in this.Controls)
{
    if (C.GetType() == typeof(System.Windows.Forms.TextBox))
    {
        C.TextChanged += new EventHandler(C_TextChanged);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是它们存储在几个组框中,而我的循环看不到它们.我可以单独循环遍历每个组框的控件,但是可以在一个循环中以简单的方式完成所有操作吗?

c# groupbox

19
推荐指数
4
解决办法
5万
查看次数

如何在C#中将\符号添加到字符串的末尾

请原谅我一个初学者的问题:)

string S="abc";
S+="\";
Run Code Online (Sandbox Code Playgroud)

不会卷曲.

string S="abc";
S+="\\";
Run Code Online (Sandbox Code Playgroud)

会使S ="abc \\"

我怎样才能使S ="abc"?

c# string escaping

9
推荐指数
2
解决办法
3万
查看次数

Log4net.dll + C#+ Crystal Reports =错误

请原谅我,如果它之前已被回答,但我在网上搜索,发现只有绝望的人问我的问题,但没有人给出我可以使用的任何答案.

我正在使用Crystal Reports在C#Visual Studio 2010中开发一个应用程序.我正在开发32位系统.一切正常.

现在我试图在另一台64位系统的计算机上运行它,安装了Crystal Reports并发生了一些可怕的错误.

************** Tekst wyj?tku **************
System.TypeInitializationException: Inicjator typów zg?osi? wyj?tek dla typu
 'CrystalDecisions.ReportSource.ReportSourceFactory'. ---> System.TypeInitializationException:
 Inicjator typów zg?osi? wyj?tek dla typu 'CrystalDecisions.Shared.SharedUtils'. --->
 System.IO.FileLoadException: Nie mo?na za?adowa? pliku lub zestawu 

'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' lub jednej z jego zale?no?ci.
Run Code Online (Sandbox Code Playgroud)

在那里请原谅我一些波兰语.它基本上意味着它找不到某些特定版本的log4net.dll文件,这显然必须被某些东西使用.

许多地方都描述了这个问题:

log4net没有记录和抛出错误

http://scn.sap.com/thread/1857957

据我所知,我的应用程序使用/期望此文件的某些版本和64位计算机上安装的Crystal Reports使用另一个版本.

浏览互联网后,我不知道应该采取什么措施来纠正它.

我真的很感激一些"傻瓜教程"如何处理它.

哦,我的应用程序需要构建为32位并在64位上运行.不可能将它构建为64位,另一件事会停止工作:(

c# log4net crystal-reports

7
推荐指数
3
解决办法
2万
查看次数

使用C#和SQL注入创建数据库

我有以下代码用于从C#应用程序创建一些数据库

SqlConnection myConnection = new SqlConnection(ConnectionString);
string myQuery = "CREATE DATABASE " + tbxDatabase.Text; //read from textbox
myConnection.Open();
SqlCommand myCommand = new SqlCommand(myQuery, myConnection);
myCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

现在我担心它是否安全,C#会接受黑客输入,如"A; DROP TABLE B"或类似的东西吗?如何让它更安全?

.net c# sql sql-server

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

找出两组记录之间的差异

我在sql server上有一组数据,如:

ID ID_Invoice Article Quantity Status
1  10         carrot  10       null
2  10         carrot  5        C
3  10         onion   8        null
4  10         onion   4        C
5  11         tomato  20       null
6  11         tomato  18       C
7  11         onion   2        null
8  11         onion   1        C
Run Code Online (Sandbox Code Playgroud)

这意味着客户订购了10个胡萝卜和8个洋葱(在一张发票上)但实际上只收到了5个胡萝卜和4个洋葱.如果status为null则为原始数量,如果status为C则为校正数量

我需要生成一个像这样的表

ID ID_Invoice Article Quantity 
1  10         carrot  -5       
2  10         onion   -4
3  11         tomato  -2
4  11         onion   -1
Run Code Online (Sandbox Code Playgroud)

显示每张发票上的订购数量和实际数量之间的差异.我不知道如何开始.任何帮助深深感激:)

sql

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

不是从自己的目录运行程序崩溃

一个基本问题:

我有一个C#Windows应用程序,通过键入从其自己的目录执行时运行正常

program1.exe
Run Code Online (Sandbox Code Playgroud)

但是当我从另一个目录执行它时给出了完整的路径

d:/progs/myprog/program1.exe
Run Code Online (Sandbox Code Playgroud)

它崩溃了.我真的需要这样做:)

我想这与程序中读取一些文件有关,这些文件位于同一目录中.我怀疑的是:

using (XmlReader OdczytywaczXML = XmlReader.Create(@"config.xml"))
Run Code Online (Sandbox Code Playgroud)

这可能是问题吗?我不想提供文件的完整路径,因为我希望我的程序只需复制文件即可在任何地方工作.

哦,我不知道如何在调试时模拟这种情况(从另一个目录运行) - 是否可能?

c# xml path

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

比较SQL中的int和varchar列

我的表中有两列,一列包含数字,另一列应该有一些从这些数字生成的字符串,如:

ID     Serial
1      SN00001
2      SN00002
127    SN00127
Run Code Online (Sandbox Code Playgroud)

但是我无法确定每个序列号是否正确.所以我想用以下方法搜索任何可能的错误:

SELECT * FROM MyTable WHERE ID <> Serial
Run Code Online (Sandbox Code Playgroud)

当然我不能写ID <> Serial,我想我应该使用一些子串选择,类型转换等等但它对我来说都是新的,我可以使用一些帮助.提前致谢!

sql database compare

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

T-SQL Len功能无法按预期工作

我正在使用Microsoft SQL Server(2008 R2,如果这很重要)

当我执行

select LEN('test')
Run Code Online (Sandbox Code Playgroud)

我按预期得到4分

但现在试试这个:

declare @s varchar
set @s='test'
select LEN(@s)
Run Code Online (Sandbox Code Playgroud)

结果是...... 1

它是如何实际工作的?

sql t-sql sql-server-2008-r2

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

在C#Listview中检查了项目

我在C#应用程序中有一个Listview控件,其中包含一些名称和复选框,用于选择一个或多个值.除了单击复选框,用户还可以单击名称,它将变为蓝色.我希望保留此功能,因为单击名称会显示更多数据,然后单击复选框标记它以进行进一步处理

我相信点击复选框更改Item.Checked属性并单击名称Changes Item.Selected但似乎没那么简单.

我有一个计算已检查项目的代码:

private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e) 
{
    foreach(ListViewItem Item in ListView1.Items) 
    {
        if (Item != null) 
        {
            if (Item.Checked == true) N++;
        }
    }
    Textbox1.Text = N.ToString();
}
Run Code Online (Sandbox Code Playgroud)

当用户单击复选框时,显示正确的数字,但是当他点击名称时,即使检查了更多复选框,选中的数字也会更改为1,这显然是错误的.此外,当窗体和控件加载时,即使没有选中复选框,我也会得到N = 1.

我究竟做错了什么?

编辑:感谢您的快速回复和有用的提示!

而我刚刚发现我的问题是我的疏忽,因为我忘了删除旧代码!:)起初我使用多个选择来拾取项目,然后我切换到复选框但仍然调用SelectionChanged事件并修改文本框内容

c# listview winforms

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