小编gor*_*ric的帖子

在WCF/.NET中返回DataTable

我有一个WCF服务,我想从中返回一个DataTable.我知道这往往是一个备受争议的话题,至于返回DataTables是否是一个好习惯.让我们暂时搁置一下.

当我从头开始创建DataTable时,如下所示,没有任何问题.该表已创建,填充并返回给客户端,一切都很好:

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    for(int i=0;i<100;i++)
    {
        tbl.Columns.Add(i);
        tbl.Rows.Add(new string[]{"testValue"});
    }
    return tbl;
}
Run Code Online (Sandbox Code Playgroud)

但是,只要我出去打开数据库来创建表,如下所示,我得到一个CommunicationException"底层连接已关闭:连接意外关闭."

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    //Populate table with SQL query

    return tbl;
}
Run Code Online (Sandbox Code Playgroud)

该表正在服务器端正确填充.它比我循环并返回的测试表要小得多,并且查询小而快 - 这里没有超时或大数据传输的问题.正在使用相同的功能和DataContracts/ServiceContracts/BehaviorContracts.

为什么填充表的方式对表成功返回有什么影响?

.net c# datatable wcf web-services

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

如何找到与给定整数对应的Excel列名?

您如何确定Excel中第n列的列名(例如"AQ"或"BH")?

编辑:一种语言无关的算法,以确定这是这里的主要目标.

language-agnostic algorithm excel

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

从.NET调用表值SQL函数

可以从.NET调用标量值函数,如下所示:

SqlCommand cmd = new SqlCommand("testFunction", sqlConn); //testFunction is scalar
cmd.CommandType = CommandType.StoredProcedure;  
cmd.Parameters.Add("retVal", SqlDbType.Int);
cmd.Parameters["retVal"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteScalar();
int aFunctionResult = (int)cmd.Parameters["retVal"].Value;
Run Code Online (Sandbox Code Playgroud)

我也知道可以以类似的方式调用表值函数,例如:

String query = "select * from testFunction(param1,...)"; //testFunction is table-valued
SqlCommand cmd = new SqlCommand(query, sqlConn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(tbl);
Run Code Online (Sandbox Code Playgroud)

我的问题是,可以将表值函数作为存储过程调用,就像标量值函数一样吗?(例如,复制我的第一个代码片段,调用一个表值函数,并通过ReturnValue参数获取返回的表).

.net c# sql

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

AutoSys调度程序更新JIL

我们使用AutoSys进行作业调度,我发现自己编写了大量的JIL(作业指令语言)脚本来删除框并重新插入它们,因为工作量变化很小(例如开始时间等).是否有可以使用的更新命令?CA的AutoSys 备忘单上没有任何信息.

scheduler autosys

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

使用未处理的异常而不是Contains()?

想象一下,您正在使用的对象具有与其关联的其他对象的集合,例如,WinForm上的Controls集合.您想要检查集合中的某个对象,但该集合没有Contains()方法.有几种方法可以解决这个问题.

  • Contains()通过循环遍历集合中的所有项来实现您自己的方法,以查看其中一个是否是您正在寻找的.这似乎是"最佳实践"方法.
  • 我最近遇到了一些代码,而不是循环,尝试访问try语句中的对象,如下所示:
try  
{  
    Object aObject = myCollection[myObject];  
}  
catch(Exception e)  
{  
    //if this is thrown, then the object doesn't exist in the collection
}
Run Code Online (Sandbox Code Playgroud)

我的问题是你认为第二种选择的编程习惯有多差,为什么?它的性能与集合中的循环相比如何?

.net c# error-handling

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

.NET - Excel ListObject在数据绑定上自动调整大小

我正在使用Visual Studio Tools for Office(2008)开发Excel 2007加载项.我有一张包含多个ListObjects的工作表,它们在启动时绑定到数据表.当它们被绑定时,它们会正确自动调整大小.

他们被重新绑定时会出现问题.我在功能区栏上有一个自定义按钮,它返回到数据库,并根据用户输入的某些条件检索不同的信息.这个新数据返回并重新绑定到ListObjects - 但是,这次它们没有调整大小并且我得到一个异常:

无法绑定ListObject,因为无法调整其大小以适合数据.ListObject无法添加新行.这可能是由于无法移动列表对象下方的对象而引起的.

内部异常:"Range类的插入方法失败"
原因:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

我无法在Google或MSDN上找到关于此错误的任何有意义的内容.我一直试图弄清楚这一点,但无济于事.

基本代码结构:

//at startup
DataTable tbl = //get from database
listObj1.SetDataBinding(tbl);
DataTable tbl2 = //get from database
listObj2.SetDataBinding(tbl2);  

//in buttonClick event handler
DataTable tbl = //get different info from database
//have tried with and without unbinding old source
listObj1.SetDataBinding(tbl);              <-- exception here
DataTable tbl2 = //get different info from database
listObj2.SetDataBinding(tbl2);
Run Code Online (Sandbox Code Playgroud)

请注意,即使ListObject正在缩小,并且不仅在它增长时,也会发生此异常.

.net c# data-binding excel vsto

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

我可以从Silverlight中的BitmapImage获取byte []吗?

我试图在Silverlight和WCF服务之间来回传递一些图像.如果可能的话,我想传递一个System.Windows.Media.Imaging.BitmapImage,因为这意味着客户端不需要进行任何转换.

但是,在某些时候我需要将此图像存储在数据库中,这意味着图像表示必须能够转换为和从中转换byte[].我可以创建一个BitmapImagebyte[]通过读取所述阵列成MemoryStream和使用BitmapImage.SetSource().但我似乎无法找到一种方法,另一种方式转换-从BitmapImagebyte[].我错过了一些明显的东西吗?

如果它有帮助,转换代码可以在服务器上运行,即它不需要是Silverlight安全的.

c# silverlight bytearray bitmapimage

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

如何从压缩文件中读取Stata二进制格式

Stata知识库包含有关从管道读取ASCII数据的注释,这将使人们无需在磁盘上存储解压缩版本即可读取文件。我们从未成功使用此处显示的方法-我总是收到错误消息 mypipe.pip: not found。我们有TB级的数据可以很好地压缩,因此这总是令人失望的。我们很想听听它是否对其他人有用。

在调查此问题时,我们发现了一种解决方法,它似乎好得多。与知识库建议不同,除ASCII文件外,它还可以与.dta文件一起使用。这对我们来说非常有趣。这是通过use命令的http选项完成的 。

我们的第一次尝试是将文件test.cgi添加到我们的webservers cgi-bin目录中:

#!/bin/sh
echo Content-type: application/x-stata
/usr/bin/zcat /data/sample.dta.gz
Run Code Online (Sandbox Code Playgroud)

我们发现

use http://www.nber.org/test
Run Code Online (Sandbox Code Playgroud)

该文件可以从Stata上使用,但是由于文件多次在LAN上鞭打,因此涉及很多开销,因此我们没有追求从URL中获取文件名或使其实用。

我们正在开发一种替代方案,它不需要实际的Web服务器,甚至不需要root权限。这是通过大多数Linux发行版附带的nc命令完成的,并且也可用于Windows。在Stata提示符下,运行compound命令:

.! (echo -ne "HTTP/1.0 200 OK\r\n\r\n"; zcat /data/sample.dta.gz;) | nc -l 8080 &
Run Code Online (Sandbox Code Playgroud)

此命令设置计算机以将标头和解压缩的文件传输到从端口8080读取的第一个进程。由于8080是高端口,因此不需要特殊权限即可使用它。直到从该端口读取文件时,此命令才会返回,此时它将向您显示确切的Stata请求。因为&状态,而nc等待。然后

. use http://127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

请注意,您不能使用“ localhost”而不是127.0.0.1,因为该use命令将不接受一部分主机名。

如果您的计算机上没有nc,请查找ncat,netcat或socat。某些版本的端口号之前需要'-p'。您可以在Windows计算机上安装nc,并且应该能够执行相同的操作,但是我们尚未尝试过。

这也可以用于ascii文件,加密文件,拆分文件,也许还有其他类型。如果仅统计/传输将写入标准输出!

有一个安全问题-您放弃Unix权限位中的读取限制。它比从磁盘读取未压缩的文件还慢,但是对我们来说仍然足够快。

我们一直试图将其打包到一个ado文件中,但没有成功,因为一个用户友好的ado程序将需要自行查找可用的端口,我们还没有找到一个很好的方法来进行通信。它返回到use命令,对此我们也不知所措。我希望列表中的某个人可能会被启发提出一种方法,或者Statacorp可能只是将解压缩合并到use命令中。

丹尼尔·芬伯格feenberg@nber.org

netcat stata

5
推荐指数
0
解决办法
390
查看次数

"官方"语言开发人员使用哪些编译工具?

那里有许多词法分析器和解析器生成器 - lex/flex和yacc/bison,jflex和javacup,gplex和gppg等.我想知道官方语言开发人员使用什么工具 - Sun和Microsoft使用任何工具这些在开发Java和.NET中,或者那些大小的商店只使用自定义内部工具吗?

c# java compiler-construction compilation

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