小编Jim*_*Jim的帖子

使用三元语法将参数设置为DBNull.Value会产生错误?

我有以下代码来设置一个参数,该参数将在INSERT语句中用于在SQL Server数据库中设置VARCHAR列.我的值对象(名为ilo)有一个名为Description的属性,它被初始化为String.Empty,然后被设置为从XML读取的某个值,或者如果该XML元素为空,它只保留为String.Empty.

因此,当插入数据库时​​,如果属性仍然设置为String.Empty,我想让它插入一个空值.

database.AddInParameter(cmd, "@description", DbType.String, 
                           (ilo.Description.Equals(string.Empty)) ?
                            DBNull.Value :
                            ilo.Description);
Run Code Online (Sandbox Code Playgroud)

所以基本上我是说,如果ilo.Description等于string.empty,请将参数设置为DBNull.Value,否则将其设置为ilo.Description.

这在Visual Studio中出现以下错误...

错误141无法确定条件表达式的类型,因为'System.DBNull'和'string'之间没有隐式转换

为什么?

奇怪的是,我可以做到以下没有错误,这应该与使用上面的内联条件语法完全相同!?!

if(ilo.Description.Equals(string.Empty))
{
    database.AddInParameter(cmd, "@description", DbType.String, DBNull.Value);
}
else
{
    database.AddInParameter(cmd, "@description", DbType.String, ilo.Description);
}
Run Code Online (Sandbox Code Playgroud)

我搜索了其他帖子,发现了下面的帖子,但它并没有真正回答我的问题.

EntLib将"空"值绑定到参数的方法

我对WHY更感兴趣,因为明显的解决方法是使用if/else语句而不是内联(三元)语法?

在这个链接上有一个答案,但我想要一个更好的解释,因为它似乎是我的BS,这不起作用; 我称之为虫子!

http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

.net c# enterprise-library ternary-operator

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

在没有自定义样式的Android Spinner中的项目之间添加更多空间?

我有一个Android应用程序我正在为一家混凝土公司写作,它将用于进出时钟.我已经使用了一些纺纱工具来选择工作地点和工作从下拉菜单,但我担心纺纱工具中的物品太靠近,员工难以选择合适的物品.

我想在微调器中的项目之间留出更多的空间,但是不想经历制作自定义样式的所有麻烦,因为我真的希望微调器的外观和行为与默认值完全相同,除非只需要更多的填充,并且需要为此制作自定义样式需要做很多工作.

是否有任何简单的改变,比如设置微调器的某些属性?我已经尝试将微调器类型设置为Dialog,但它只是显示具有相同间距的列表,只是没有附加到微调器控件.

java android spinner android-spinner

18
推荐指数
4
解决办法
3万
查看次数

从DataTable填充时,如何在DataGridView图像列中禁用Null图像

我有一个现有的应用程序,需要在DataGridView单元格中显示一个图像,以表示该记录是否具有与之关联的特定标志(不是用户可编辑的,这来自数据库).

如果有一个标志,我会显示相应的图像,如果没有标记,我希望列中没有显示任何内容.

DataGridView列不是在Visual Studio设计器中创建的,否则这很容易.我可以在列上设置NullValue属性.相反,当所有数据都加载到DataTable中时,在运行时创建列,然后从该DataTable创建DataView,然后将DataGridView的Datasource设置为DataView.

我不能完全重写这个,否则我只是在VS Designer中定义列,而不是仅仅从DataTable中定义列的荒谬方式.

那么我的问题是,当基础数据表为空时,如何使图像的列显示为什么?

这里有一些伪C#来证明我的意思.记住,我没有写它来使用这样的两个DataTables; 当我把它递给我时,就是那种方式,我不想仅仅为了添加一个新列而做出重大改变......

DataTable rawData = someMethodThatReturnsMyRawData();
DataTable data = new DataTable();
data.Columns.Add("Flags", typeof(Image));
data.Columns.Add("SomeOtherColumn");

foreach (DataRow rawDataRow in rawData.Rows)
{
    DataRow dataRow = data.NewRow();
    bool hasFlagType1 = false;
    bool hasFlagType2 = false;

    if (rawDataRow["FlagType1ID"] != DBNull.Value)
    {
        hasFlagType1 = true;
    }

    if (rawDataRow["FlagType2ID"] != DBNull.Value)
    {
        hasFlagType2 = true;
    }

    if (hasFlagType1 && hasFlagType2)
    {
        dataRow[0] = Properties.Resources.BothFlagsImage;
    }
    else if (hasFlagType1)
    {
        dataRow[0] = Properties.Resources.FlagType1Image;
    }
    else if (hasFlagType2)
    {
        dataRow[0] = …
Run Code Online (Sandbox Code Playgroud)

.net c# datagridview image winforms

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

如何使用T-SQL在DB中搜索某些子字符串的所有文本字段

我有一个庞大的架构,有数百个表和数千列.我知道一个特定的IP地址存储在这个数据库中的几个地方,但是我不确定它存储在哪个表或列中.基本上,我试图在任何地方找到这个IP地址存储在DB中,因此我可以将其更新为所有这些位置的新值.

这是我在T-SQL语句中的第一个破解,用于打印出数据库中包含子字符串10.15.13的每个文本列的表和列名称以及值.

现在,这是有效的.问题是,当我在Management Studio中执行它时,对sp_executesql的调用实际上将返回每个不返回任何内容的查询的所有空结果(即列没有任何带有该子字符串的记录),并且它填充结果窗口到它的最大值,然后我实际上看不出是否有任何印刷品.

有没有更好的方法来编写此查询?或者我可以以不同的方式运行它,以便它只显示这个子字符串存在的表和列?

DECLARE
    @SchemaName VARCHAR(50),
    @TableName VARCHAR(50),
    @ColumnName VARCHAR(50);
BEGIN
    DECLARE textColumns CURSOR FOR
    SELECT s.Name, tab.Name, c.Name
    FROM Sys.Columns c, Sys.Types t, Sys.Tables tab, Sys.Schemas s
    WHERE s.schema_id = tab.schema_id AND tab.object_id = c.object_id AND c.user_type_id = t.user_type_id
    AND t.Name in ('TEXT','NTEXT','VARCHAR','CHAR','NVARCHAR','NCHAR');

    OPEN textColumns

    FETCH NEXT FROM textColumns
    INTO @SchemaName, @TableName, @ColumnName

    WHILE @@FETCH_STATUS = 0
    BEGIN
        DECLARE @sql NVARCHAR(MAX),
                @ParamDef NVARCHAR(MAX),
                @result NVARCHAR(MAX);              
        SET @sql = N'SELECT ' + @ColumnName + ' FROM ' + …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server dynamic-sql

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

根据XSD验证XML并忽略子元素的顺序

我在C#应用程序中有一个方法,可以针对嵌入式XSD验证用户输入XML文件.它工作正常,但它要求所有子元素都按照XSD中定义的确切顺序.但对我而言,只要元素存在,顺序就无关紧要了.

例如,如果我有以下XSD ...

<xs:element maxOccurs="unbounded" name="ParentElement">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="FirstChildElement" type="xs:string" />
      <xs:element name="SecondChildElement" type="xs:string" />
      <xs:element name="ThirdChildElement" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

像这样的XML ......

<ParentElement>
    <FirstChildElement>someValue</FirstChildElement>        
    <ThirdChildElement>someValue</ThirdChildElement>
    <SecondChildElement>someValue</SecondChildElement>
</ParentElement>
Run Code Online (Sandbox Code Playgroud)

如果我验证它,我会收到一个错误,因为子元素出现故障.

我可以对XSD进行一些更改,因此验证只关注元素是否存在,并且它们是否在正确的父级下,而不是它们所处的顺序?

c# xml validation xsd

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

如何设置对话框按钮文本的字体大小

我有一个Android应用程序,它使用一些从XML布局膨胀的自定义对话框.对话框视图的内容来自XML布局,但实际的正面和负面按钮是通过调用构建器的setPositiveButton和setNegativeButton方法添加的,因此我无法控制(或至少不知道如何控制)样式按钮本身.

请参阅我的LoginConfirmationDialog.java文件中的onCreateDialog方法,该文件扩展了DialogFragment.它基本上弹出一个非常简单的对话框,要求确认谁登录(即"你是Joe Schmoe吗?",带有Yes和No按钮).

在这种情况下,XML布局只有一个TextView,为了简化这一点(因为用户将是需要大文本和大按钮的大手指脏手指的建筑工人),我使TextView的字体非常大.这两个按钮的文字字体要小得多,因为它们不是我的布局的一部分,并且添加了setPositiveButton和setNegativeButton方法,我该如何控制字体大小?

@Override    
public Dialog onCreateDialog(Bundle savedInstanceState) {

    Bundle args = this.getArguments();

    String empName = args.getString("empName");         

    // Use the Builder class for convenient dialog construction        
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_login_confirmation, null);

    TextView message = (TextView)view.findViewById(R.id.txtLoginConfirmationMessage);
    message.setText("Are you " + empName + "?");

    builder.setView(view);      

    builder.setPositiveButton("Yes", 
            new DialogInterface.OnClickListener() {                   
                public void onClick(DialogInterface dialog, int id) {
                    mListener.onEmpConfirmPositiveClick(LoginConfirmationDialog.this);
                }               
            });               
    builder.setNegativeButton("No", 
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    mListener.onEmpConfirmNegativeClick(LoginConfirmationDialog.this);
                }
            });  

    // Create the …
Run Code Online (Sandbox Code Playgroud)

java android android-dialogfragment

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

如何使用OLEDB获取Excel中的唯一Excel工作表名称列表; 过滤掉显示在元数据中的非工作表

我在使用OLEDB从Excel电子表格中获取工作表名称时遇到问题.问题是,当我使用GetOleDbSchemaTable时,生成的DataTable不仅仅包含实际的工作表名称; 它有"表"的额外行,我只能假设它们由Excel内部使用.

例如,如果我有一个名为myWorksheet的工作表,下面的代码最终可能会包含一个包含myWorksheet $,myWorksheet $ PrintTable和myWorksheet $ _的列表.只有第一个myWorksheet $记录用于实际工作表.其他人只是我不需要的垃圾.当您在元数据中查看它们时,它们看起来就像常规表,即使使用TABLE类型也是如此.

现在我只是手动过滤出名称中带有"$ _"或"$ Print"的内容,但谁知道其他Excel功能可能会使这些额外的记录以不同的格式出现.

有没有人知道获取实际工作表名称的最佳方法,而不是这些不是工作表的内部表?元数据中是否存在可以区分它们的东西?

 private ArrayList getXlsWorksheetNames(OleDb.OleDbConnection conn)
    {
        ArrayList wsList = new ArrayList();
        DataTable schemaTable;

        try
        {
            conn.Open();
            schemaTable = conn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, null);

            foreach (DataRow row in schemaTable.Rows)
            {
                //form.appendToResultsTxt("Adding worksheet to list: " + Environment.NewLine +
                //    "Name = " + row.Field<string>("TABLE_NAME") + "," + Environment.NewLine +
                //    "Type = " + row.Field<string>("TABLE_TYPE") + "," + Environment.NewLine + Environment.NewLine);
                wsList.Add(row.Field<string>("TABLE_NAME"));
            }
            conn.Close();
        }
        catch (Exception ex)
        {
            if (this.mode == …
Run Code Online (Sandbox Code Playgroud)

c# oledb excel

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

返回字符串时,在Database.AddOutParameter中使用Size参数的内容是什么?

我得到一个字符串作为输出参数,并需要知道在调用AddOutParameter时为Size参数设置什么.

我知道我可以使用一些巨大的数字,比如int.MaxValue,但想知道最佳实践.

在SQL Server中,该列实际上是uniqueidentifier类型.正在执行的T-SQL语句插入一条记录,然后将一些输出变量设置为新插入记录的ID和GUID.这是我正在使用的实际代码,但变量名称已更改.

database.AddOutParameter(cmd, "@someInt", DbType.Int32, 0);
database.AddOutParameter(cmd, "@someString", DbType.String, 0);

database.ExecuteNonQuery(cmd);

someInt = (int)database.GetParameterValue(cmd, "@someInt");
someString = database.GetParameterValue(cmd, "@someString").ToString();
Run Code Online (Sandbox Code Playgroud)

执行时,我收到以下错误...

System.InvalidOperationException:String [2]:Size属性的大小无效.

所以对我来说很明显,你不能只使用带字符串输出参数的0大小.你可以用Int32输出参数做到这一点,但我猜一个字符串需要一个有效的大小.那么设置尺寸的最佳做法是什么?它可以只是一个巨大的尺寸而不会影响性能吗?我可以将它设置为int.MaxValue或其他什么?这里可以使用任何常量; (没有看到任何String.MaxValue - 你可能会说我是C#的新手,有Java背景).

我应该找出uniqueidentifier列的最大大小,并将大小设置为该值吗?如果我为VARCHAR或NVARCHAR列做同样的事情呢?

我希望框架能够为我做这件事; 我不想为输出的每个字符串指定一个大小.任何人都有任何建议,以获得最佳实践?

我已经阅读了下面的帖子以及MSDN文档,但我还没有找到最佳实践答案.

AddOutParameter - 查找DBType.Int32长度的非魔数方式

从SQL Server读取VARBINARY(MAX)到C#

.net c# database sql-server enterprise-library

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

XCode 4.5警告父类/子类的类别之间的方法名称冲突

我正在开发一个最初在XCode 4.0中构建的项目,然后迁移到使用XCode 4.2.现在我已经测试了迁移到XCode 4.5,我收到了大量警告,如下所示......

instance method 'values' in category from <pathToTheFile>/HistoryObject+extras.o conflicts with same method from another category
Run Code Online (Sandbox Code Playgroud)

这些警告从未出现在以前版本的XCode中,并且代码没有更改.

该项目在iOS 4.3中设置为部署目标.

所以,我们从以前的开发人员那里得到了一堆DAO类型,我认为这些类是从CoreData自动生成的,然后这些类中的每一个都有一个类,它扩展它以实现某些方法.我举个例子......

我们有一个名为LisaObject的基类,它继承自NSManagedObject,它有一个名为LisaObject + extras的类.在LisaObject + extras中,有一个名为"values"的方法返回一个NSMutableDictionary.

然后我们有一个名为HistoryObject的类,它继承自LisaObject.还有一个名为HistroyObject + extras的HistoryObject类别.此类别还有一个名为"values"的方法.在HistoryObject + extras values方法中,它调用[super values],然后检查某些条件并在字典中设置一些未在基类方法中设置的其他值.

然后我们有一个名为LessonStatusObject的类继承自HistoryObject,它也有一个名为LessonStatusObject + extras的类,它有一个名为values的方法.此值方法还调用[超级值],然后对返回的字典执行一些额外的工作.

对于这些"值"方法中的每一个,我们在编译时得到一个警告,就像上面显示的那样,它表示Category有一个名称冲突的方法.

我有几个问题.

首先,这种实施是否会导致任何合法问题,或者这些警告通常是否良性?我试着想一想这个实现如何在运行时引起歧义,但我不知道怎么会发生这种情况.

第二,我是否应该做些什么来修复这些警告(我并不是说只是让它们停止出现;我的意思是修复原因)?我们应该采取其他方式吗?

另外,为什么XCode 4.2不会对此发出警告,但XCode 4.5会发出警告?

我是否误解了类别?我的意思是,如果"values"方法实际上是每个类实现的一部分,那么以我们的方式覆盖它们就不会有问题,但编译器似乎只是因为这些是类别而抱怨.这有什么不安全的吗?

任何建议都非常感谢.

编辑:只是为了提供更多信息......当我们使用XCode 4.2时,该项目将编译器设置为Apple LLVM Compiler 3.0.现在,当我在XCode 4.5中打开项目时,它将编译器设置为Apple LLVM Compiler 4.1.

xcode objective-c categories ios xcode4.5

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

使用 Netbeans 7 和 Axis2 从属性文件为客户端配置 Web 服务 URL

我是网络服务开发的新手。我将 Netbeans 7.0 与 Axis2 插件和 Tomcat 7 一起使用。

我为定义 Web 方法的服务器组件创建了一个项目,然后为客户端组件创建了另一个项目。通过选择 New -> Webservice Client 在 Netbeans 中创建客户端。

当您在 Netbeans 中选择 New -> Webservice Client 时,它会立即要求您提供 WSDL URL。所以当然我从我的本地 Tomcat 安装中给了它 WSDL URL。但是当我将它作为一个真正的应用程序分发时呢?用户不会将他们的客户端指向http://localhost:8080/axis2/services/ ?wsdl。我的意思是,当从 IDE 运行客户端时,一切正常,但是当我分发它时(这是一个劳动力管理应用程序,您可以在一个或多个客户端上打卡/下班,并且将考勤卡写入中央数据库),每个客户端都需要能够指向它应该连接到的任何生产服务器的 web 服务 URL。

我想将 web 服务 URL 存储在属性文件中,但不知道在客户端以编程方式执行什么操作来调用从属性文件加载的 URL。

在我客户的 dist 文件夹中,如果我打开 netbeans 用 WinZip 创建的 JAR,我会看到一个文件名 jax-ws-catalog.xml,其中包含 URL(指向 localhost)。我假设这是运行时使用的 URL 的来源。

那么解决这个问题的正确方法是什么?我四处搜索,但我在 google 搜索中发现的东西往往显示 webservice 调用的方式与 Netbeans 放在一起的自动生成的代码完全不同,我想要一些特定于如何的信息Netbeans 创建了一个 Web 服务客户端,这样我就不会为了让 IDE 覆盖它们而最终进行更改。

谢谢!对不起,很长的解释。

-吉姆

java tomcat axis2 netbeans web-services

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