我对SQL Server 2008中的用户定义表类型有疑问.
为了满足ASP.NET应用程序之一的需要,我们在SQL Server 2008上定义了自己的表类型,并将它们用作存储过程中的参数(在ASP.NET应用程序中执行sql命令时,我们将DataTable对象作为存储过程的参数传递看这里的例子)
问题是当我们从ASP.NET运行Sql命令(执行存储过程)时,我们收到一个错误:
对象'ourTableType',数据库'ourDatabase',架构'ourSchema'拒绝EXECUTE权限.
为什么会这样?为什么我们需要为用户定义的表类型设置权限?为什么仅仅对使用它的存储过程设置权限是不够的?如果我们要设置它,不管是什么,为什么没有EXECUTE权限类型在属性窗口中任何设置(我只看到Control,References,Take Ownership,View Definition)?
我还不明白的是,Control在属性窗口中设置权限可以解决问题,并且存储过程可以顺利运行.
asp.net security stored-procedures user-defined-types sql-server-2008
出于好奇......当我们调用一个返回某个值但我们不处理/使用它的方法时会发生什么?而且我们也期望有时这个返回值可能非常大.那个价值在哪里?甚至创造了吗?如果是,是否存在可能出现的性能问题或其他问题?(在这种情况下,最佳做法是什么?)
假设我们有一些方法可以执行一些数据库操作(插入,更新)并返回DataTable对象中的一些数据.而且我也知道这个DataTable对象有时会非常大:
public static Datatable InsertIntoDB(...)
{
// executing db command, getting values, creating & returning Datatable object...
...
return myDataTable;
}
Run Code Online (Sandbox Code Playgroud)
然后当使用这个方法时,它被称为:
DataTable myDataTable = InsertIntoDB(...);
// this Datatable object is handled in some way
Run Code Online (Sandbox Code Playgroud)
但有时候这样简单:
InsertIntoDB(...);
// returned value not handled; Problem???
Run Code Online (Sandbox Code Playgroud)
在我的第一次想到它认为系统足够智能,看到返回值被忽略,并没有引起任何问题(它只是被释放)但我想确定并听到更详细的解释它来自一个更有经验的人这方面比我好.
我有一个关于对数据库中的外键列使用null与默认值的问题.在设计数据库时,我发现了很多关于null与默认值的相反意见,但不完全是外键(主要优点和缺点).
目前我正在设计一个新的数据库,它将为不同的Web应用程序和其他具有不同数据访问方法(ORM,存储过程)的系统存储大量数据,并且我希望尽可能在最低级别实现一般规则(数据库).(所以不要在以后的应用程序中担心这个规则).
举个例子,假设我有一个用户表,User其中包含国籍的外键列,NationalityID这是CountryID表的主键Country.
现在我有两个/三个选项:
答:我允许NationalityID列(以及数据库中所有其他类似的外键列)为空,只需坚持使用常见的方法检查null(在应用程序中应用规则)
要么
B:我为每个外键指定一个默认值,让我们说"-1",并在每个关系表中添加"-1"作为键,其他所有数据作为"无数据"(对于本例中的Country表格)我把CountryID为"-1"的列和CountryName我设置为"No data"的列.因此,每次我想知道用户的国籍时,我总是会得到没有额外代码规则的结果(我不需要检查它是否为空).
要么
C:我可以禁止外键的空值.但这确实是我想要避免的.(如果不是附加数据(用户国籍),我需要有一个存储至少基本数据(用户名)的选项)
那么B好的做法是不是?我在这里错过了什么?我通过这种方法获得了更多的收益吗?我可以遇到哪些问题(除了要小心在ID值为"-1"的关系表中总是有额外的列,表示"没有数据")?
您对外键默认值的好/坏经历是什么?
谢谢
sql-server nhibernate database-design foreign-keys default-value
我有一个ASP.NET页面,注册了2个用户控件.第一个只有一个按钮.第二个是简单文本,默认隐藏.我想要的是在单击第一个按钮时(即按钮单击事件)使第二个可见.
ASP.NET页面:
<%@ Page Title="" Language="C#" CodeFile="test.aspx.cs" Inherits="test" %>
<%@ Register Src="~/UC_button.ascx" TagName="button" TagPrefix="UC" %>
<%@ Register Src="~/UC_text.ascx" TagName="text" TagPrefix="UC" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MyTestContent" Runat="Server">
<UC:button ID="showbutton1" runat="server" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MyTestContent2" Runat="Server">
<UC:text runat="server" Visible="false" ID="text1" />
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
UC_Button.ascx.cs:
protected void button1_Click(object sender, EventArgs e)
{
Button btnSender = (Button)sender;
Page parentPage = btnSender.Page;
UserControl UC_text = (UserControl)parentPage.FindControl("text1");
UC_text.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我Object reference not set to an instance of an object.在代码的最后一行得到了众所周知的错误.
编辑:
首次发布此内容时,我忘记提及一件事.用户控件在不同的<asp:Content></asp:Content>控件中(我编辑了上面的示例).如果我把它们放在相同的占位符代码中工作就好了.如果我将它们放在单独的内容占位符中,我无法使用findcontrol以任何方式找到它们.为什么这样,我怎么能找到它们?
在我的程序中,我有一些timer(1000).subscribe()实例以及一些timer(1000, 1000).subscribe()部分。
我遇到了一些内存泄漏问题,想知道是否可以通过取消订阅计时器来缓解这些问题。取消订阅循环计时器似乎是直接且必要的,但我是否还必须取消订阅仅发出一次的计时器?
我的问题的第二部分是是否有更好的方法来取消订阅发射计时器而不是将其放入变量中,如下所示:
const myTimer = timer(1000).subscribe(() => {
myTimer.unsubscribe();
});
Run Code Online (Sandbox Code Playgroud)
谢谢!
asp.net ×2
c# ×1
findcontrol ×1
foreign-keys ×1
nhibernate ×1
node.js ×1
observable ×1
return-value ×1
rxjs ×1
security ×1
sql-server ×1
typescript ×1