如何在存储过程(SQL Server 2005)中获取受UPDATE查询影响的行数作为结果集.例如
CREATE PROCEDURE UpdateTables
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE Table1 Set Column = 0 WHERE Column IS NULL
UPDATE Table2 Set Column = 0 WHERE Column IS NULL
UPDATE Table3 Set Column = 0 WHERE Column IS NULL
UPDATE Table4 Set Column = 0 WHERE Column IS NULL
END
Run Code Online (Sandbox Code Playgroud)
然后返回:
Table1 Table2 Table3 Table4
32 45 0 3
Run Code Online (Sandbox Code Playgroud) 想要创建自定义数据注释验证.有关如何创建它们的有用指南/示例吗?
首先:
具有最小和最大长度的StringLength.我知道.NET 4可以做到这一点,但是想在.NET 3.5中做同样的事情,如果可能的话,只能定义最小长度(至少x个字符),最大长度(最多x个字符),或者两者都是(在x和y之间).
其次:
使用模数运算验证 - 如果数字是有效长度,我希望使用模数11算法进行验证(我已经在JavaScript中实现了它,所以我想它只是一个简单的移植?)
更新:
解决了第二个问题,只是复制JavaScript实现并进行一些调整,所以不需要解决方案.
如何在登录时隐藏您没有访问权限的数据库SQL Server 2005 / 2008?
目前,如果用户连接,他们会看到服务器上的所有数据库,这意味着他们必须扫描列表才能找到他们的数据库.
我想截断一些文本(从数据库或文本文件加载),但它包含HTML,因此包含标记,将返回更少的文本.这可能导致标签未被关闭或部分关闭(因此整洁可能无法正常工作且内容仍然较少).如何根据文本进行截断(当你到达表时可能会停止,因为这可能会导致更复杂的问题).
substr("Hello, my <strong>name</strong> is <em>Sam</em>. I´m a web developer.",0,26)."..."
Run Code Online (Sandbox Code Playgroud)
会导致:
Hello, my <strong>name</st...
Run Code Online (Sandbox Code Playgroud)
我想要的是:
Hello, my <strong>name</strong> is <em>Sam</em>. I´m...
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
虽然我的问题是如何在PHP中完成它,但是知道如何在C#中执行它会很好...或者应该没问题,因为我认为我可以将方法移植过来(除非它是内置的方法).
另请注意,我已经包含了一个HTML实体´- 必须将其视为单个字符(而不是本示例中的7个字符).
strip_tags 是一个后备,但我会失去格式和链接,它仍然会有HTML实体的问题.
目前有一个DataTable,但希望通过WebHandler将其流式传输给用户.FileHelpers有CommonEngine.DataTableToCsv(dt, "file.csv").但是它会将其保存到文件中.如何将其保存到流中呢?当我知道高级列或它们没有改变时,我知道如何做到这一点,但我想直接从数据表生成列标题.
如果我知道列,我只是创建类:
[DelimitedRecord(",")]
public class MailMergeFields
{
[FieldQuoted()]
public string FirstName;
[FieldQuoted()]
public string LastName;
}
Run Code Online (Sandbox Code Playgroud)
然后使用FileHelperEngine并添加记录:
FileHelperEngine engine = new FileHelperEngine(typeof(MailMergeFields));
MailMergeFields[] merge = new MailMergeFields[dt.Rows.Count + 1];
// add headers
merge[0] = new MailMergeFields();
merge[0].FirstName = "FirstName";
merge[0].LastName = "LastName";
int i = 1;
// add records
foreach (DataRow dr in dt.Rows)
{
merge[i] = new MailMergeFields();
merge[i].FirstName = dr["Forename"];
merge[i].LastName = dr["Surname"];
i++;
}
Run Code Online (Sandbox Code Playgroud)
最后写入一个流:
TextWriter writer = new StringWriter();
engine.WriteStream(writer, merge); …Run Code Online (Sandbox Code Playgroud) 我通过使用集成Windows身份验证和关闭匿名访问来限制对站点的访问.这样我就可以向他们展示他们的真实姓名(从查看Active Directory并使用服务器变量LOGON_USER)并执行其他相关的Active Directory任务.
然后,我如何通过"以其他用户身份登录"链接再次提示他们的用户凭据,显示浏览器提示(就像您可以使用Chrome或Firefox等浏览器,或者该网站不在"Intranet"中) IE中的区域而不是Web表单?
由于SharePoint提供此功能,我假设有一种方法可以通过代码执行此操作,但我不知道哪些代码可以执行此操作(使用C#).我可以发送一个401标题,使提示出现,但是你如何确认他们是否登录?
为了节省客户端下载时间和网络使用,是否可以使用HTML5的localStorage功能来存储链接样式表,javascript文件和二进制数据(例如图像)的内容,而不是每次都能点击服务器?
这会让事情变得复杂 - 因为我认为你必须通过JavaScript而不仅仅是一个script或link元素来添加链接资产,为那些没有启用JavaScript的人打破页面?除非您可以HEAD在浏览器下载内容之前解析内容(使用请求检查上次修改日期和其他标题).
或者最好只是坚持304 Not Modified和eTag标题?
尝试将流反序列化为List<T>(或任何其他类型)并且因错误而失败:
Foo.Deserialize<T>(System.IO.Stream)无法从用法中推断出方法的类型参数.尝试显式指定类型参数.
这失败了:
public static T Deserialize<T>(this Stream stream)
{
BinaryFormatter bin = new BinaryFormatter();
return (T)bin.Deserialize(stream);
}
Run Code Online (Sandbox Code Playgroud)
但这有效:
public static List<MyClass.MyStruct> Deserialize(this Stream stream)
{
BinaryFormatter bin = new BinaryFormatter();
return (List<MyClass.MyStruct>)bin.Deserialize(stream);
}
Run Code Online (Sandbox Code Playgroud)
要么:
public static object Deserialize(this Stream stream)
{
BinaryFormatter bin = new BinaryFormatter();
return bin.Deserialize(stream);
}
Run Code Online (Sandbox Code Playgroud)
没有铸造是否可以做到这一点,例如(List<MyStruct>)stream.Deserialize()?
更新:
使用stream.Deserialize<List<MyClass.MyStruct>>()错误结果:
Run Code Online (Sandbox Code Playgroud)System.InvalidCastException: Unable to cast object of type 'System.RuntimeType' to type 'System.Collections.Generic.List`1[MyClass+MyStruct]'. at StreamExtensions.Deserialize[T](Stream stream) at MyClass.RunSnippet()
更新2(示例控制台应用程序) - 运行一次以创建文件,再次从中读取
using …Run Code Online (Sandbox Code Playgroud) 使用实体数据框架,我有一个被定义的模型Client,它只包含一个id和一个名字.然后,我与另一个名为Appointment包含id和日期的模型有关联.
对于表单,我希望允许用户创建一个新客户端,并在同一表单上添加约会(在创建客户端之前).我有部分工作(增加一个约会).
在控制器中:
[HttpPost]
public ActionResult Create(Client client)
{
var appointment = new Appointment();
UpdateModel(appointment);
client.Appointments.Add(appointment);
db.AddToClients(client);
db.SaveChanges();
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
在视图中:
<div class="editor-label">
<%= Html.LabelFor(model => model.Name) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Name) %>
<%= Html.ValidationMessageFor(model => model.Name) %>
</div>
<% Html.RenderPartial("Appointment", new Appointment()); %>
Run Code Online (Sandbox Code Playgroud)
'部分'观点:
<div class="editor-label">
<%= Html.LabelFor(model => model.AppointmentDate) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.AppointmentDate) %>
<%= Html.ValidationMessageFor(model => model.AppointmentDate) %>
</div>
Run Code Online (Sandbox Code Playgroud)
但是,由于以下几个原因,这并不理想:
Comments在两个Client …我有一个Linq表达式,可能会根据某些条件进行更改.我想做的一个例子(留空一点我不确定):
Expression<Func<Project, bool>> filter = (Project p) => p.UserName == "Bob";
if(showArchived)
{
// update filter to add && p.Archived
}
// query the database when the filter is built
IEnumerable<Project> projects = unitOfWork.ProjectRepository.Get(filter);
Run Code Online (Sandbox Code Playgroud)
如何更新过滤器以添加任何额外参数?
在检索所有记录时,我使用a Where来进一步过滤结果.但是,这导致对数据库的查询多于严格必要的查询.
IEnumerable<Project> projects = unitOfWork.ProjectRepository.Get(filter);
if(showArchived)
{
projects = projects.Where(p => p.Archived);
}
Run Code Online (Sandbox Code Playgroud)
Get方法使用GenericRepository模式:
public class GenericRepository<TEntity> where TEntity : class
{
internal ProgrammeDBContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(ProgrammeDBContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get( …Run Code Online (Sandbox Code Playgroud)