我试图第一次使用延迟加载来初始化我的类中的进度对象.但是,我收到以下错误:
字段初始值设定项不能引用非静态字段,方法或属性.
private Lazy<Progress> m_progress = new Lazy<Progress>(() =>
{
long totalBytes = m_transferManager.TotalSize();
return new Progress(totalBytes);
});
Run Code Online (Sandbox Code Playgroud)
在.NET 2.0中,我可以执行以下操作,但我更喜欢使用更新的方法:
private Progress m_progress;
private Progress Progress
{
get
{
if (m_progress == null)
{
long totalBytes = m_transferManager.TotalSize();
m_progress = new Progress(totalBytes);
}
return m_progress;
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
非常感谢.
我试图在我的Windows窗体应用程序中取消选择(删除)一些组合框.在我的应用程序中,我有一个Reset方法,它将每个组合的SelectedIndex设置为-1.我的所有组合框都是数据绑定的,即每个组合框都使用数据源填充.
我注意到有时我的Reset方法有效,即它取消选择当前选中的项目并清空组合.但是,在我尝试将其设置为-1之后,它会直接选择第一个项目(SelectedIndex = 0).从用户的角度来看,这看起来像一个错误,因为它并不总是"清除"表单.
根据MSDN:
"要取消选择当前选定的项目,请将SelectedIndex设置为-1.如果项目是数据绑定项目,则无法将ComboBox项目的SelectedIndex设置为-1."
有谁知道一项工作?
非常感谢
在我们的许多项目中,我看到了一些自定义集合或容器类,它们包含某种泛型集合,例如List(of T)类.
它们通常有一个GetXXX方法,它返回自定义集合类使用的任何类型的IEnumerable,因此可以使用foreach循环迭代内部集合.
例如
public IEnumerable<UploadState> GetStates
{
get
{
return new List<UploadState>(m_states);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些类应该实现IEnumerable接口,并调用GetEnumeratorList本身.
是否有首选方式,还是由开发人员负责?
是否在执行存储过程中的END之后的语句?
我发现我的存储过程包括BEGIN/END块后的丢弃过程.但是,每次我在代码中的其他地方执行存储过程时,它似乎工作正常,并且pvd_sp_yyy不会被删除.我不知道为什么?我首先担心这个问题,所以无论如何我都会删除附加声明.
有没有人对此有任何想法?
谢谢
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[pvd_xxx]
@var
AS
BEGIN
DECLARE @RETURN int
SET @RETURN = 0
IF EXISTS (
SELECT * FROM table1
WHERE name = @var
)
BEGIN
SET @RETURN = 1
END
RETURN @RETURN
END
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pvd_sp_yyy]') AND type in (N'P', N'PC'))
DROP PROCEDURE [pvd_sp_yyy]
Run Code Online (Sandbox Code Playgroud) 我有一张表,里面有超过700万条记录.该表没有主键.我想添加一个新的标识列并将其设置为主键.我尝试使用SSMS添加列,然后将其设置为主键.我把这个新列称为Id.
这几乎可以工作,但我想将表的默认顺序更改为基于另一列,例如日期时间列按降序排列.这可能吗?也许我需要使用临时表和ROW_NUMBER()函数.
但是,我不是很擅长SQL.有人可以帮忙吗?
我还需要一个回滚脚本,以便我可以回到原始表.
在.NET中订阅事件时,我需要创建一个新的委托实例,例如
toolbarControl1.OnUploadEventHandler +=
new ToolbarControl.UploadEventHandler(toolbarControl1_OnUpload);
Run Code Online (Sandbox Code Playgroud)
或者做以下事情更好吗?
toolbarControl1.OnUploadEventHandler += toolbarControl1_OnUpload;
Run Code Online (Sandbox Code Playgroud)
提前致谢.
在C#2.0 winform应用程序中将托管对象设置为null通常是一个好主意,即在关闭它们时将表单和控件设置为null,或者我应该将其留给垃圾收集.
我的项目中的一个类叫做Job,它存储String和Lists类型等.是否有必要这样做:
if (Job != null)
{
Job = null;
}
Run Code Online (Sandbox Code Playgroud)
或者这只是非托管资源所必需的,例如具有dispose方法的文件句柄.我绝对应该调用它,然后设置为null.
任何澄清都会很棒.谢谢.
我想深究这一点,因为这让我感到困惑.任何人都可以解释我何时应该在我的脚本中使用GO语句?
据我所知,GO语句不是T-SQL语言的一部分,而是用于将一批语句发送到SQL服务器进行处理.
当我在查询分析器中运行以下脚本时,它似乎运行正常.然后我关闭窗口,它会显示一个警告:
"有未提交的交易.您是否希望在关闭窗口之前提交这些交易?"
BEGIN TRANSACTION;
GO
ALTER PROCEDURE [dbo].[pvd_sp_job_xxx]
@jobNum varchar(255)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)
但是,如果我在ALTER语句的末尾添加一个GO就可以了(如下所示).怎么会?
BEGIN TRANSACTION;
GO
ALTER PROCEDURE [dbo].[pvd_sp_xxx]
@jobNum varchar(255)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
GO
COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)
我想删除所有的GO,但是它抱怨alter procedure语句必须是查询批处理中的第一个语句?这只是我必须坚持的要求吗?
这看起来很奇怪,因为如果我BEGIN TRANSACTION和GO ....该语句被发送到服务器进行处理并开始一个事务.
接下来是ALTER过程,一个COMMIT TRANSACTION和一个GO(因此将这些语句发送到服务器进行处理,提交完成之前开始的事务),当我关闭窗口时它是怎么回事?当然,我已经满意alter procedure语句是批处理中的第一个.怎么抱怨未提交的交易.
任何帮助将非常感谢!
我有一个asp.net控件,它使用正则表达式来验证用户输入的名字和姓氏.它适用于多达40个字符......我认为通过表达式的外观,它也允许'像O'Donald这样的名字,也可能是夸张的名字.
ValidationExpression="^[a-zA-Z''-'\s]{1,40}$"
Run Code Online (Sandbox Code Playgroud)
我的问题是带有重音的名称/字符,例如西班牙语和法语名称可能包含例如ñ是不允许的.有谁知道如何修改我的表达式以考虑到这一点?
我试图避免在我的项目中使用标量值函数,所以我决定尝试使用CTE将其中一个转换为表值函数.
我知道标量值函数的性能很差,因为它们必须为每一行执行,而SQL服务器无法以任何方式对其进行优化(即它充当黑盒子).
这是我第一次尝试将其转换为表值函数...
CREATE FUNCTION [dbo].[fn_get_job_average] (@jobnumber VARCHAR(50))
RETURNS TABLE AS RETURN
(
WITH JobAverage AS
(
SELECT job.Jobnumber, CAST(AVG(CAST(jobMark.Mark AS DECIMAL(18,1))) AS DECIMAL(18,1)) AS Average
FROM job
INNER JOIN jobMark
ON job.Guid = jobMark.Guid
WHERE job.Jobnumber = @jobnumber
GROUP BY job.Jobnumber
)
SELECT Jobnumber,
CASE
WHEN EXISTS(SELECT * FROM JobAverage) THEN Average
ELSE 0.0 -- This never executes???, i.e. for job records that don't have a mark nothing is returned
END AS Average
FROM JobAverage
)
Run Code Online (Sandbox Code Playgroud)
我想输出一个包含工号和平均分数的表格.
对于有标记的工作,似乎没问题.也就是说,平均值与jobnumer一起返回.
对于没有商标的工作,似乎出错了.语句的ELSE部分不执行.也就是说,作为平均工作,我不会返回0.0.没有记录返回.我错过了什么吗? …