我正在开发一个从MS-SQL服务器获取数据的应用程序(2005).在命令文本中,我可以像这样传递一个sql查询:
string query = "SELECT T1.f1, T1.f2, T2.f3 FROM table1 T1 join table2 T2" +
"on T1.id = T2.id AND T1.dt = T2.dt ..."
....
cmd.CommandText = query;
Run Code Online (Sandbox Code Playgroud)
我也可以将查询作为我的SQL服务器上的视图,如下所示:
CREATE VIEW V1 AS
"SELECT T1.f1, ..."
Run Code Online (Sandbox Code Playgroud)
然后我可以在这样的简化查询中使用视图:
string query = "SELECT f1, f2, f3 FROM V1";
....
cmd.CommandText = query;
Run Code Online (Sandbox Code Playgroud)
我不确定哪条路更好.视图会比SQL查询更快吗?顺便说一下,我在这里展示的查询是一个简化的查询.实际查询SELECT比较复杂.
我正在使用控制台应用程序将数据插入到MS SQL Server 2005数据库.我有一个要插入的对象列表.这里我使用Employee类作为示例:
List<Employee> employees;
Run Code Online (Sandbox Code Playgroud)
我能做的是在这个时间插入一个对象:
foreach (Employee item in employees)
{
string sql = @"INSERT INTO Mytable (id, name, salary)
values ('@id', '@name', '@salary')";
// replace @par with values
cmd.CommandText = sql; // cmd is IDbCommand
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
或者我可以像这样构建一个balk插入查询:
string sql = @"INSERT INTO MyTable (id, name, salary) ";
int count = employees.Count;
int index = 0;
foreach (Employee item in employees)
{
sql = sql + string.format(
"SELECT {0}, '{1}', {2} ",
item.ID, item.Name, item.Salary);
if ( …Run Code Online (Sandbox Code Playgroud) 这可能是一个简单的问题,但我是PowerShell的新手,无法找到方法.基本上,如果指定的文件不存在,我必须运行.BAT文件.文件名在文件夹中的文件名为" mmddyyy .dat",其中mmddyyyy是今天的月份,日期(如果<10则为0前缀)和年份.伪代码将是这样的:
$File = "C:\temp\*mmddyyyy*.dat" # how to parse Get-Date mmddyyyy and build this pattern?
#if $File exist # check any file exist?
.\myBatch.bat # run the bat file, can I run it in hidden mode?
Run Code Online (Sandbox Code Playgroud) 我在远程PC(RPC001)上安装了PS 1.0.我使用Windows Sysinternals工具PSExec.exe在远程执行以下过程:
PSExec \\RPC001 -u myID -p myPWD PowerShell C:\script\StartPS.ps1 par1 par2
Run Code Online (Sandbox Code Playgroud)
我之后可以看到PowerShell.exe进程在远程PC上运行,但它实际上什么也没做,只是挂在那里.我试着在脚本中放一个简单的"Write-Output/Host"代码.我通过RTS在遥控器上运行相同的脚本,它在那里工作.
不确定我是否遗漏了使用PSExec运行脚本的任何其他内容,或者它是PSExec.exe限制.我想在远程启动一个PS脚本,在本地做一些事情(在本地压缩一些文件并删除旧文件).
我在Stackoverflow中问了一个类似的问题:PowerShell 运行远程进程.唐建议我使用PSExec.这听起来像是解决问题的另一种方法.但是,我无法使用PowerShell.有什么办法让PS在远程PC上工作?
顺便说一句,我不能使用PS 2.0,因为我的网络不允许我安装PS 2.0所需的Windows XP SP3.
是否可以使用可选的实现方法定义接口?例如,我的核心库中有以下接口定义作为IDataReader:
public interface IDataReader<T> {
void StartRead(T data);
void Stop();
}
Run Code Online (Sandbox Code Playgroud)
但是,在我当前的实现中,从未使用或实现过Stop()方法.在我的所有实现类中,必须使用throw NotImplementedExcetion()作为默认值来实现此方法:
class MyDataReader : IDataReader<MyData> {
...
public void Stop()
{
// this none implementaion looks like uncompleted codes
throw NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
当然,我可以删除throw异常代码并将其保留为空.
当我设计这个数据阅读器界面时,我认为它应该提供一种方法来停止阅读过程.也许我们将来某个时候会使用Stop().
无论如何,不确定是否可以将此Stop()方法作为可选的实现方法?我能想到的唯一方法是要么定义两个接口,一个是stop,另一个是没有IDataReader和IDataReader2.另一个选择是将这个打破到这样的接口:
interface IDataReader<T> {
void StartRead(T data);
}
interface IStop {
void Stop();
}
Run Code Online (Sandbox Code Playgroud)
在我的实现案例中,我必须转换或使用IStop来检查我的实现是否支持Stop()方法:
reader.StartRead(myData);
....
// some where when I need to stop reader
IStop stoppable = reader as IStop;
if (stoppable != null ) stoppable.Stop();
...
Run Code Online (Sandbox Code Playgroud)
我还是要写那些代码.有什么建议?不确定是否有任何方法可以在.Net或C#中的接口中定义可选的实现方法?
将类转换为另一个类列表的问题和答案很酷.如何将MyData列表转换为另一个MyData2列表?例如:
List<MyData> list1 = new List<MyData>();
// somewhere list1 is populated
List<MyData2> list2;
// Now I need list2 from list1. How to use similar LINQ or Lambda to get
list2 = ... ?
Run Code Online (Sandbox Code Playgroud)
在这里我尝试了这个,但我无法弄清楚完整的代码:
list2 = (from x in list1 where list1.PropertyList == null
select new MyData2( null, x.PropertyB, x.PropertyC).
Union (
from y in list1 where list.PropertyList != null
select new MyData2( /* ? how to loop each item in ProperyList */
y.PropertyB, y.PropertyC)
).ToList();
Run Code Online (Sandbox Code Playgroud)
其中MyData2有一个CTOR(字符串,字符串,字符串).
我有一个字符串数组.不确定是否有简单的方法来获取首先在数组中找到的项目的索引?
# example array
$array = "A", "B", "C"
$item = "B"
# the following line gets null, any way to get its index?
$index = $array | where {$_ -eq $item} | ForEach-Object { $_.Index }
Run Code Online (Sandbox Code Playgroud)
我可以循环完成.不确定是否有其他方法?
CGRect类型是结构类型.如果我想将属性定义为此类型,我应该为此类型使用assign或retain属性吗?
@interface MyClass {
CGRect rect;
...
}
@property (nonatomic, assign) CGRect rect; // or retain?
Run Code Online (Sandbox Code Playgroud)
或者我必须写自己的吸气剂和二传手?
要在html页面中添加svg图形,通常使用object标签将其包装为:
<object id="svgid" data="mysvg.svg" type="image/svg+xml"
wmode="transparent" width="100" height="100">
this browser is not able to show SVG: <a linkindex="3"
href="http://getfirefox.com">http://getfirefox.com</a>
is free and does it!
If you use Internet Explorer, you can also get a plugin:
<a linkindex="4" href="http://www.adobe.com/svg/viewer/install/main.html">
http://www.adobe.com/svg/viewer/install/main.html</a>
</object>
Run Code Online (Sandbox Code Playgroud)
如果您不在object标签中使用width和height属性,则svg将以完整大小显示.通常我从Open Graphics Library获取svg文件进行测试.有没有办法通过使用JavaScript获得svg的大小?或者我可以只看一下svg xml文件,找出顶级svg标签的大小?
我有一个具有属性Value的类,如下所示:
public class MyClass {
public property var Value { get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)
我想使用MethodInfo.Invoke()来设置属性值.以下是一些代码:
object o;
// use CodeDom to get instance of a dynamically built MyClass to o, codes omitted
Type type = o.GetType();
MethodInfo mi = type.GetProperty("Value");
mi.Invoke(o, new object[] {23}); // Set Value to 23?
Run Code Online (Sandbox Code Playgroud)
我现在无法访问我的工作.我的问题是如何使用23等整数值设置Value?
c# ×5
powershell ×3
sql-server ×2
.net-3.5 ×1
iphone ×1
javascript ×1
lambda ×1
linq ×1
objective-c ×1
reflection ×1
sql ×1
svg ×1
sysinternals ×1
t-sql ×1