小编Stu*_*tLC的帖子

SAVE TRANSACTION vs BEGIN TRANSACTION(SQL Server)如何很好地嵌套事务

我有一个存储过程需要设置一个保存点,以便在某些情况下,它可以撤消它所做的一切,并将错误代码返回给调用者,或接受/提交它并将成功返回给调用者.但无论调用者是否已经开始交易,我都需要它.该文件在这个问题上非常混乱.这是我认为可行的,但我不确定所有的后果.

问题是 - 这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.

sql-server transactions nested-transactions

15
推荐指数
3
解决办法
3万
查看次数

ThreadStatic for TPL Task

如何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切换线程,它将无法生存.

.net c# multithreading

14
推荐指数
1
解决办法
2094
查看次数

动态/编程地向SQL添加WHERE子句

如何以编程方式将搜索条件添加到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)

是否可以动态地向存储过程发送条件?

c# sql sql-server ado.net stored-procedures

13
推荐指数
2
解决办法
3万
查看次数

如何直接打印rdlc报告而不在C#中显示PrintDialog()?

我有一个应用程序,我必须打印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)

c# printing rdlc

13
推荐指数
2
解决办法
4万
查看次数

mysqli持久连接

简而言之,是否有某种mysqli_pconnect高用量PHPMySQL服务器,或者我是否需要坚持mysql未经改进?如果是这样,为什么他们删除它?

php mysql mysqli

12
推荐指数
3
解决办法
2万
查看次数

Sql Order By ...使用`Case When`进行不同的升序,降序和自定义订单

我想在某些条件下按折扣对产品进行分类

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)

但它会抛出错误 - 我怎么能按折扣排序?

sql sql-server

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

使用xpath-default-namespace定义在XSL XPath中使用的默认命名空间

我有这个简单的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)

xslt xpath xml-namespaces

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

是否有键盘快捷方式可以在Visual Studio 2008中查看所有打开的文档

我正在尝试学习Visual Studio中的键盘快捷方式,以提高工作效率.因此,我在使用Microsoft的VS 2008 IDE时下载了一个显示Visual Basic中许多默认键绑定的文档.

当我尝试他们所说的键盘快捷键来查看所有打开的文档(CTRL+ ALT+DOWN ARROW)时,我在XP机器上得到了一个完全出乎意料的结果; 我的整个屏幕显示颠倒了!

这是微软某人的恶作剧吗?我无法想象这种翻转屏幕会带来什么实际价值.

有谁知道在VS 2008中查看所有打开文档的正确键盘快捷键是什么?

哦,如果你尝试上面的快捷方式,它会以我的方式翻转你的显示器,做一个CTRL+ ALT+UP ARROW切换回来.

keyboard shortcuts visual-studio

9
推荐指数
1
解决办法
549
查看次数

在连接派生表时获取"未为列1指定列"

我正在写一个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查询中包含但不确定如何.

在此先感谢您的帮助.

sql-server join

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

C#按值传递而不是按引用传递

请考虑以下代码(我有意将 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,以取代ab在全球范围内.

例:

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

9
推荐指数
2
解决办法
7759
查看次数