我有一个存储过程需要设置一个保存点,以便在某些情况下,它可以撤消它所做的一切,并将错误代码返回给调用者,或接受/提交它并将成功返回给调用者.但无论调用者是否已经开始交易,我都需要它.该文件在这个问题上非常混乱.这是我认为可行的,但我不确定所有的后果.
问题是 - 这Stored Procedure (SP)是其他人所称的.所以我不知道他们是否已经开始交易......即使我要求用户开始使用我的SP交易,我仍然对正确使用Save Points...的问题有疑问
我的SP将测试交易是否正在进行,如果没有,请启动一个BEGIN TRANSACTION.如果一个事务正在进行中,它将改为创建一个保存点SAVE TRANSACTION MySavePointName,并保存这就是我所做的事实.
然后,如果我必须回滚我的更改,如果我BEGIN TRANSACTION早点做了,那么我会ROLLBACK TRANSACTION.如果我做了保存点,那么我会ROLLBACK TRANSACTION MySavePointName.这种情况似乎很有效.
这是我有点困惑的地方 - 如果我想保留我已经完成的工作,如果我开始一个事务,我将执行COMMIT TRANSACTION.但是如果我创建了保存点?我试过COMMIT TRANSACTION MySavePointName,但然后调用者尝试提交其事务并收到错误:
COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION.
所以我当时想知道 - 可以回滚一个保存点(这样可行:ROLLBACK TRANSACTION MySavePointName不会回滚调用者的事务).但也许人们永远不需要"承诺"它?它只是停留在那里,以防你需要回滚它,但一旦原始事务提交(或回滚)就会消失?
如果有一种"更好"的方式来"嵌套"交易,请也提供一些建议.我还没有弄清楚如何嵌套BEGIN TRANSACTION但只是回滚或提交我的内部事务.似乎ROLLBACK总会回滚到顶层事务,而COMMIT只是递减@@trancount.
如何ThreadStatic在TPL任务中使用?我的理解("使用C#进行Wrox Professional Parallel Programming",第74页)是一个Task可以在执行期间从一个线程切换到另一个线程.
我想做的事?
我想在静态类中维护一个会话ID,所以我不需要将这个id传递给我的所有方法.我的库有类似的方法login(id),logout(id)以及许多与此id相关的凭证进行操作的方法.但我不想将此id传递给每个方法.我可以确保在不同的线程中为不同的会话调用我的库.因此,将id保存login()在ThreadStatic变量中将起作用.
现在我想使用由我创建的TPL任务ThreadPool.我可以将我的会话ID传递给Task,但是如果我将这个id存储在ThreadStatic变量中,那么如果我的Task切换线程,它将无法生存.
如何以编程方式将搜索条件添加到SQL存储过程?在我的应用程序(C#)中我正在使用存储过程(SQL Server 2008R2)
ALTER PROCEDURE [dbo].[PROC001]
@userID varchar(20),
@password varchar(20)
AS
SELECT * FROM tUsers WHERE RTRIM(Name) = @userID AND RTRIM(Password) = @password
Run Code Online (Sandbox Code Playgroud)
我希望通过更多条件扩展此查询,现在我不知道有多少条件将使用此查询,因为程序执行... 2,3,6或20.我想以编程方式添加这些条件,如:
SELECT * FROM tUsers WHERE RTRIM(Name) = @userID AND RTRIM(Password) = @password
AND Field2 = '1' AND Field3 = '0' OR Field4 <> '8' AND Field5 < '100' ....
Run Code Online (Sandbox Code Playgroud)
是否可以动态地向存储过程发送条件?
我有一个应用程序,我必须打印RDLC报告,而不显示printDialog并使用应用程序中定义的默认指定的打印机.下面是我的测试实现代码.
Microsoft.Reporting.WinForms.ReportViewer reportViewerSales = new Microsoft.Reporting.WinForms.ReportViewer();
Microsoft.Reporting.WinForms.ReportDataSource reportDataSourceSales = new Microsoft.Reporting.WinForms.ReportDataSource();
reportViewerSales.Reset();
reportViewerSales.LocalReport.ReportPath = @"Sales.rdlc";
reportDataSourceSales.Name = "SalesTableDataSet";
int i = 1;
foreach (Product item in ProductSalesList)
{
dataset.CurrentSales.AddCurrentSalesRow(i, item.Name, item.Quantity.ToString(), item.Price.ToString(), item.Price.ToString());
i++;
}
reportDataSourceSales.Value = dataset.CurrentSales;
reportViewerSales.LocalReport.DataSources.Add(reportDataSourceSales);
dataset.EndInit();
reportViewerSales.RefreshReport();
reportViewerSales.RenderingComplete += new RenderingCompleteEventHandler(PrintSales);
Run Code Online (Sandbox Code Playgroud)
这是我的渲染完成方法
public void PrintSales(object sender, RenderingCompleteEventArgs e)
{
try
{
reportViewerSales.PrintDialog();
reportViewerSales.Clear();
reportViewerSales.LocalReport.ReleaseSandboxAppDomain();
}
catch (Exception ex)
{
}
}
Run Code Online (Sandbox Code Playgroud) 简而言之,是否有某种mysqli_pconnect高用量PHP和MySQL服务器,或者我是否需要坚持mysql未经改进?如果是这样,为什么他们删除它?
我想在某些条件下按折扣对产品进行分类
ORDER BY
CASE WHEN @OrderBy = 0
THEN table.id END ASC,
CASE WHEN @Orderby = 2
THEN table.id END ASC,
Run Code Online (Sandbox Code Playgroud)
我想做下面的事情,因为我没有表中的折扣列
CASE WHEN @OrderBy = 4
THEN (100-((table.price/table.oldprice)*100) as discount END ASC
Run Code Online (Sandbox Code Playgroud)
但它会抛出错误 - 我怎么能按折扣排序?
我有这个简单的xml文档:
<?xml version='1.0' encoding='UTF-8'?>
<registry xmlns="http://www.iana.org/assignments" id="character-sets">
<registry id="character-sets-1">
<record>
<name>ANSI_X3.4-1968</name>
</record>
</registry>
</registry>
Run Code Online (Sandbox Code Playgroud)
当我使用这个xsl时,我可以提取名称:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.iana.org/assignments" version="1.0">
<xsl:template match="/my:registry">
<xsl:copy-of select="//my:record/my:name"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
但是,如果我省略了xsl xpath-selectors中的命名空间,我得不到输出:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.iana.org/assignments" xpath-default-namespace="http://www.iana.org/assignments" version="1.0">
<xsl:template match="/registry">
<xsl:copy-of select="//record/name"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
我认为xpath-default-namespace意味着要做的伎俩.我错过了什么?
如果库版本很重要我有
libexpat1(> = 1.95.8)
libxerces-C3.1
libxml2(> = 2.7.4)
libxslt1.1(> = 1.1.25)
我正在尝试学习Visual Studio中的键盘快捷方式,以提高工作效率.因此,我在使用Microsoft的VS 2008 IDE时下载了一个显示Visual Basic中许多默认键绑定的文档.
当我尝试他们所说的键盘快捷键来查看所有打开的文档(CTRL+ ALT+DOWN ARROW)时,我在XP机器上得到了一个完全出乎意料的结果; 我的整个屏幕显示颠倒了!
这是微软某人的恶作剧吗?我无法想象这种翻转屏幕会带来什么实际价值.
有谁知道在VS 2008中查看所有打开文档的正确键盘快捷键是什么?
哦,如果你尝试上面的快捷方式,它会以我的方式翻转你的显示器,做一个CTRL+ ALT+UP ARROW切换回来.
我正在写一个left join并得到一个
没有为列1"错误指定列.
我究竟做错了什么?
LEFT JOIN
(
SELECT CASE WHEN COUNT(*) > 1 THEN '' ELSE mycolumn END
FROM
(
SELECT code_value
FROM allocation
WHERE allocation.id='[val]'
GROUP BY code_value
) grp
GROUP BY code_value
) AS code4table
ON code4table.itemid = table1.id
Run Code Online (Sandbox Code Playgroud)
如果所有值都相同,我想返回code_value值,否则返回''我猜我还需要code4table.itemid在我的select查询中包含但不确定如何.
在此先感谢您的帮助.
请考虑以下代码(我有意将 MyPoint编写为此示例的引用类型)
public class MyPoint
{
public int x;
public int y;
}
Run Code Online (Sandbox Code Playgroud)
它是普遍公认的(至少在C#中)当你通过引用传递时,该方法包含对被操作对象的引用,而当你通过值传递时,该方法复制被操纵的值,因此全局范围中的值是不受影响.
例:
void Replace<T>(T a, T b)
{
a = b;
}
int a = 1;
int b = 2;
Replace<int>(a, b);
// a and b remain unaffected in global scope since a and b are value types.
Run Code Online (Sandbox Code Playgroud)
这是我的问题; MyPoint是引用类型,所以我希望在相同的操作Point,以取代a与b在全球范围内.
例:
MyPoint a = new MyPoint { x = 1, y = 2 };
MyPoint b = new …Run Code Online (Sandbox Code Playgroud) c# value-type reference-type pass-by-reference pass-by-value