我已经使用Artinsoft的VB6到.NET向导将VB6应用程序转换为C#,并且我在以前使用过Err.Number的任何地方都收到了升级警告.
// UPGRADE_WARNING:(2081)Err.Number有一个新的行为.
转换后的代码是指;
Microsoft.VisualBasic.Information.Err().Number
Run Code Online (Sandbox Code Playgroud)
我没有运气,找出差异是什么.有谁知道它可能是什么,或者忽略这个警告是否安全?
UPDATE
对于任何在将来偶然发现这个问题的人 - 一句警告; 在C#.NET应用程序中继续使用Err.Number是不安全的.该属性仍然可用,但是在错误发生后没有按预期填充.如果错误来自COM组件,则唯一可以按预期填充它的情况.
正常错误,例如DB访问,IO操作等不会给Err().Number赋值,因此不幸的是它的使用必须重构.
奇怪的是,在VB .NET中,它仍然按预期工作,因此在决定转换的目标语言时,可能需要记住这一点.
我的网页上有一个GridView控件,它使用分页.我看到显然出现了重复的行,但我知道它们不在数据中,只要我在与我正在使用的默认列不同的列上排序,它们似乎就会消失.但是,当再次对此原始列进行排序时,它们会重新出现.
这是ascx的片段;
<asp:GridView
ID="gvResults"
AllowPaging="True"
CssClass="DataTable"
runat="server"
AutoGenerateColumns="False"
OnRowDataBound="gvResults_RowDataBound"
AllowSorting="True"
Width="750px"
OnSorting="gvResults_Sorting"
PagerSettings-Mode="NumericFirstLast"
PagerSettings-FirstPageText="<<"
PagerSettings-LastPageText=">>"
PagerSettings-PageButtonCount="5"
PagerSettings-Position="Bottom"
PagerStyle-CssClass="paginationContainer"
PagerStyle-HorizontalAlign="Left"
OnPageIndexChanging="gvResults_PageIndexChanging">
<PagerSettings
FirstPageText="<<"
LastPageText=">>"
Mode="NumericFirstLast"
PageButtonCount="5" />
<PagerStyle CssClass="paginationContainer" HorizontalAlign="Left" />
Run Code Online (Sandbox Code Playgroud)
这可能与我的问题无关,但我包括它以防万一.
现在,我认为问题可能是由于某个特定场景,其中默认情况下对网格进行排序的列将填充许多行的相同值.这可能听起来很奇怪,但是列是接近,并且网格显示邻近搜索结果,因此有些搜索可能会返回具有相同邻近度的许多结果.
只有具有相同接近度的行数超过每页显示的结果数(在我的情况下为10)时,才会出现重复结果的问题.
每当发生这种情况时,我会看到一行出现,例如第二页,也出现在第三页上(但不会出现在同一页面上).对不同的列进行排序并对结果进行分页似乎可以消除这个问题.
现在,经过多次头/墙接口后,我得出了一个推测性的解释;
这是完全预期的行为,因为当字段相同时没有指定的方法对行进行排序.其他一些机制必须决定如何对行进行排序,无论这种机制是什么,每当分析结果时都会导致重复的问题.
我在这里走在正确的轨道上吗?如果是这样,我该如何解决这个问题?除了用户指定的列之外,还有某种方法可以对辅助列进行排序吗?
我的SQL Server数据库表中的一列包含路径(不是文件路径,只是目录路径).
我目前有一个查询,它使用该LIKE函数返回给定文件路径的所有子文件夹;
WHERE Path LIKE @FilePath + '%'
Run Code Online (Sandbox Code Playgroud)
另外,我知道这种方法存在问题,因为LIKE使用的转义字符都是有效的文件路径字符.我将在完成的查询中正确使用ESCAPE.
无论如何,回到我的问题.我希望能够修改查询,以便它只返回指定路径的直接子文件夹.这并不像在字符串末尾添加一个斜杠那么容易,因为很明显%wildcard在解析字符串的右边部分时吞噬了所有内容.
我正在考虑使用[^]转义序列,或许做一个排除\字符的搜索,但我没有运气.我试过这个;
WHERE Path LIKE @FilePath + '[^\]'
Run Code Online (Sandbox Code Playgroud)
但它不会产生预期的结果,所以我甚至不确定我是否正确使用它.
鉴于以下XAML;
<Grid>
<Grid.RowDefinitions>
<RowDefinition MinHeight="100"/>
<RowDefinition Height="2"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Background="LightBlue">
<Button Height="30"
Click="Button_Click">Hide Lower Panel</Button>
</Border>
<GridSplitter Grid.Row="1"
ResizeDirection="Rows"
Width="Auto"
HorizontalAlignment="Stretch"
Margin="0"
x:Name="Splitter"/>
<Border Grid.Row="2"
Background="LightCoral"
x:Name="LowerPanel" MinHeight="25"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
在哪里Button_Click;
this.LowerPanel.Visibility = this.LowerPanel.Visibility == Visibility.Visible
? Visibility.Collapsed
: Visibility.Visible;
Run Code Online (Sandbox Code Playgroud)
这看起来像这样;

如果在执行任何其他操作之前单击该按钮,则它会按预期折叠;

但是,如果我使用网格分割器调整大小..

然后当我按下按钮时,会发生以下情况;

有没有办法让下部元素在调整大小后再次正确折叠?
注意:出于这个问题的目的,我刚刚使用了代码隐藏事件处理程序和一个按钮来触发它,但在现实生活中它以适当的MVVM方式完成,可见性由视图模型上的绑定属性决定.
我在使用Oracle 10g中的UTL_MAIL包时遇到了一些麻烦,并且想知道是否有人有任何解决方案?
我以SYSMAN身份连接到我的数据库并加载以下两个脚本;
@C:\ ORACLE \产品\ 10.2.0\DB_1\RDBMS\ADMIN\utlmail.sql
@C:\ ORACLE \产品\ 10.2.0\DB_1\RDBMS\ADMIN\prvtmail.plb
我设置了SMTP服务器;
ALTER SYSTEM SET smtp_out_server ='mymailserver.fake:25'SCOPE = BOTH;
我授予用户所需的权限;
GRANT执行ON utl_mail TO MYUSER;
但是如果我连接到"MYTABLESPACE"(MYUSER存在的地方),如果我参考UTL_MAIL.SEND,我会收到以下错误;
PLS-00201:必须声明标识符'UTL_MAIL.SEND'
如果我用SYSMAN虽然(SYSMAN.UTL_MAIL.SEND)前缀它,它的工作原理,但我不想这样做,因为这个程序包含此调用没有哪个安装脚本中的表空间的知识.
有没有办法安装这些脚本,以便它们可以普遍访问,并且不需要执行SYSMAN前缀?
干杯,
克里斯
我正在尝试根据与另一个表的关系缩小DataView中的行,而我正在使用的RowFilter如下所示;
dv = new DataView(myDS.myTable,
"id IN (SELECT DISTINCT parentID FROM myOtherTable)",
"name asc",
DataViewRowState.CurrentRows);
Run Code Online (Sandbox Code Playgroud)
"myTable"和"myOther"表通过myTable.ID和myOtherTable.parentID相关,因此我们的想法是DataView应该只包含来自"myTable"的行,这些行在"myOtherTable"中有相应的子行.
不幸的是,我收到了这个错误;
语法错误:'DISTINCT'运算符后缺少操作数.
据我所知,SQL很好,所以我想知道在使用DISTINCT关键字作为RowFilter的SQL的一部分有一些限制吗?任何人都有任何想法?
我已经使用WiX创建了一个安装程序,并且正在尝试DWORD在我的产品的修复安装期间保留现有的注册表项.要存储现有值,我使用以下WiX片段;
<Property Id="PreserveMySetting" Secure="yes">
<RegistrySearch Id="FindExistingMySetting"
Root="HKLM"
Key="Software\!(loc.ProductManufacturer)\!(loc.ProductName)"
Name="MySetting"
Type="raw"
Win64="no" />
</Property>
Run Code Online (Sandbox Code Playgroud)
然后我使用由保存的值驱动的组件设置它.
问题是,注册表搜索将DWORD作为"格式化"字符串返回,例如;
#1
而不仅仅是
1
这意味着当我的组件设置注册表项时,它创建为REG_SZ值为"#1",即使我已指出它应该是一个整数;
<Component Id="MySettingKey"
Guid="{76C4B14C-14BC-42E1-91F0-75C9F2A20EC8}">
<RegistryValue Id="MySetting"
Action="write"
Name="MySetting"
Value="[PreserveMySetting]"
Type="integer"
KeyPath="yes"
Key="Software\!(loc.ProductManufacturer)\!(loc.ProductName)"
Root="HKMU"/>
</Component>
Run Code Online (Sandbox Code Playgroud)
有没有办法获得组件使用的实际注册表值?
使用现有的perl代码调用具有两个参数的Oracle函数;
my $func = $dbh->prepare
(q
{
BEGIN
:result := myStoredProc(value1 => :Param1, value2 => :Param2);
END;
}
);
$func->bind_param(":Param1", $opt_a);
$func->bind_param(":Param2", $opt_b);
$func->bind_param_inout(":result", \$result, 20);
$func->execute();
Run Code Online (Sandbox Code Playgroud)
如果我现在想要扩展此功能以允许调用任何存储过程(名称作为参数传递给我认为的perl脚本).
那么可以将任意数量的参数传递给函数调用吗?
Perl绝不是我的强项,所以我不知道这个问题有多难.
我认为这里提出问题的部分是实际的SQL;
BEGIN
:result := myStoredProc(value1 => :Param1, value2 => :Param2);
END;
Run Code Online (Sandbox Code Playgroud)
我不确定这个代码如何适应任何数量的参数.
如果有人有这方面的经验,我真的很感激你能给予的任何帮助.
谢谢
我有以下代码;
IQueryable<MyClass> query = listOfObjects.Where(x => x.SomeProp == 1);
Run Code Online (Sandbox Code Playgroud)
我将此传递给一个特定API的方法,该方法期望IQueryable,这很好.
但是,我想动态构建谓词,所以我正在使用它Expression.Lambda来实现这一点,然后我.Compile将它转回一个Func<MyObject, bool>.
我原以为以下会有效;
Func<MyClass, bool> predicate = x => GetPredicate();
IQueryable<MyClass> query = list.Fields.Where(predicate);
Run Code Online (Sandbox Code Playgroud)
但是,传递predicate给Where已经将返回类型更改为IEnumerable<MyClass>,这显然不是API所需的类型.
我做了(天真地)尝试predicate.AsQueryable(),但有问题的API(SharePoint客户端对象模型)失败了,通用的"不支持指定的方法".错误信息.
我不知道这是LINQ提供程序的局限性,但是无论如何......我很想理解为什么将其Func拉出到自己的变量中并将其传入以Where影响类型推断的方式它确实.
我正在尝试解决是否可以使用C++检查Windows Server 2003中是否加载了特定的视频卡设备驱动程序.任何人都可以指点我如何实现这一目标吗?
谢谢
我想知道如何检查设备驱动程序是否使用Perl加载?操作系统是Windows Server 2003,我很想知道特定视频卡的驱动程序是否正确加载.
我有两个.NET程序集注册为COM +组件,我正在从常规控制台应用程序测试工具中测试它们;
Dim objFirst As New MyFirstComponent() 'COM+ initialisation
Dim RC As Boolean = objFirst.GetValue()
Run Code Online (Sandbox Code Playgroud)
方法调用成功执行.这是MyFirstComponent的定义;
<ProgId("MyFirstComponent")> _
<Guid("...")> _
<ClassInterface(ClassInterfaceType.None)> _
<Transaction(TransactionOption.Supported)> _
Public Class MyFirstComponent
Inherits ServicedComponent
Implements IMyFirstComponent
Public Function GetValue() As Boolean Implements IMyFirstComponent.GetValue
Dim objSecond As New MySecondComponent() 'COM+ initialisation
Dim RC As Boolean = objSecond.GetValue()
Return RC
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
在MySecondComponent初始化的时候,我得到一个带有以下消息的RemotingException;
无法加载类型'MySecondComponent',...,Version = ...,Culture = neutral,PublicKeyToken = ...'
所有程序集也都有很强的名称.我无法弄清楚为什么我可以成功触发对第一个组件的方法调用,但是当它试图随后加载第二个组件本身时,它无法解析该类型.
作为旁注,如果我在测试工具中运行"GetValue()"主体的代码,它会按预期执行.一旦事情进入调用其他COM +组件的COM +组件领域,问题似乎才会出现.
更新
我想我现在正在缩小这个问题.似乎COM +正在持续进行某些操作,我必须在运行客户端之前从组件服务窗口手动关闭COM +应用程序.之前的问题是我每次更改内容时都在测试客户端(比如将程序集添加到GAC),并且出于某种原因,COM +仍然认为无法找到程序集.关闭应用程序,将所需的程序集添加到GAC并再次运行客户端按预期工作.
这对我的小概念证明客户端来说很好.所以我回到我的真实代码并试了一下,但现在我又遇到了另一个奇怪的问题.我的COM +应用程序似乎无法找到他们正常的项目引用.我真的不想继续添加他们引用GAC的一切,所以我现在试图找出为什么我的普通,非COM +引用没有得到解决.
我有两个列表public List<string> FileNames和public List<string> FileNamesWithoutExtension.在FileNames我有完整路径的所有文件的列表中.我想只复制没有扩展名的文件名到FileNamesWithoutExtension列表.我在下面使用简单的代码:
FileNames = Directory.GetFiles(folderpath, "*").ToList();
foreach (string file in Files)
{
FileNamesWithoutExtension.Add(System.IO.Path.GetFileNameWithoutExtension(file));
}
Run Code Online (Sandbox Code Playgroud)
如何使用LinQ做到这一点?