Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server出现问题';ASP.NET中的默认列属性_C#_Asp.net_Webforms_Sql Server Express - Fatal编程技术网

C# SQL Server出现问题';ASP.NET中的默认列属性

C# SQL Server出现问题';ASP.NET中的默认列属性,c#,asp.net,webforms,sql-server-express,C#,Asp.net,Webforms,Sql Server Express,我已经将定义的默认值'default.gif'添加到数据类型为ntext的列中 然后在aspx页面上,我放置了一个文件上载控件,并将其文件名值作为参数插入到该列的INSERT查询中。我想做的是能够在没有人上传的情况下指向一个特定的文件,这样即使用户没有上传图片,每个项目也会有一张图片 我得到的是字段中的空值,甚至不是null,甚至不是双引号 一片空白!我想知道为什么它不添加默认值 列的默认值仅在执行INSERT操作时使用,并且: 该列未包含在插入操作的列列表中,或 该列包含在插入操作的列列表中

我已经将定义的默认值'default.gif'添加到数据类型为ntext的列中

然后在aspx页面上,我放置了一个文件上载控件,并将其文件名值作为参数插入到该列的INSERT查询中。我想做的是能够在没有人上传的情况下指向一个特定的文件,这样即使用户没有上传图片,每个项目也会有一张图片

我得到的是字段中的空值,甚至不是null,甚至不是双引号


一片空白!我想知道为什么它不添加默认值

列的默认值仅在执行
INSERT
操作时使用,并且:

  • 该列未包含在插入操作的列列表中,或
  • 该列包含在插入操作的列列表中,但
    列表中的相应位置为
    默认值
    ,例如:
插入表1(文件名,/*其他列*/)

值(默认值,/*其他值*/)

我猜无论您的数据层是什么(您没有指定一个,我可以看到),都无法生成这种形式的
INSERT
语句


您的代码:

using (SqlCommand comm = new SqlCommand("INSERT INTO Teachers(Name, PictureFileName, Blog, IsAdmin) VALUES (@Name, @PictureFileName, @Blog, @IsAdmin);", conn))
您需要添加一些新代码,例如:

string insertStatement = "INSERT INTO Teachers(Name, Blog, IsAdmin";
if(!String.IsNullOrWhitespace(/* Wherever you get the picture file name from */)
{
   insertStatement += ", PictureFileName";
}
insertStatement += ") VALUES (@Name, @Blog, @IsAdmin";
if(!String.IsNullOrWhitespace(/* Wherever you get the picture file name from */)
{
   insertStatement += ", @PictureFileName";
}
insertStatement += ");";

然后在
SqlCommand
构造函数中使用该insertStatement变量-您可能还希望添加
@PictureFileName
参数,如果这是应用程序的性能关键部分,您可能希望使用stringbuilder来构造该insert语句,或者使用字符串格式代码。

确保实现上载的查询在列中插入空值,而不是空字符串。仅通过一个空白字符串(即“.”)不一定意味着您将插入默认值。

如果您进入数据库并手动插入新行,将列设置为null,是否有效?@Zack-尝试插入
null
不会导致使用默认值-它尝试插入
null
。假设您向数据库发送insert语句,即使文件上载控件为空。您看过这条语句了吗?它是否将字段设置为空字符串?如果是这样,这就是您的问题。如果您向insert子句添加一列,其默认值将被insert子句提供的参数覆盖。所以如果它是空的,就不要添加到insert中。@James,我想可能就是它了。。但我试图做的是让数据库有一个默认值,例如'defaultfile.jpg',这样,如果用户没有上传图片,它仍然会在他的文件中显示图片。。我将picture字段的参数设置为FileUploadControlInstance.FileName;插入
NULL
-在查询窗口中尝试以下代码-
创建表T1(ID int not NULL默认值0)插入到T1(ID)值(NULL)
-您将得到一个错误您是正确的,我道歉。默认值(字面上的默认值)需要插入,也不应该用引号括起来。也就是说,如果列不接受null,如您的示例中所示。那么我是否要检查upload控件是否为空,然后将其值设置为null(如何执行此操作!)或者我应该做两个方法或两个插入查询,一个包括上传文件时要使用的文件名,另一个排除上传文件时要使用的文件名?看看Damiend_异教者的答案。您必须编写一些代码来检查FileUpload控件的值是否有值。我更喜欢自己在存储过程中做任何事情,只是因为我对传递的值有更多的控制权,并且可以将SQL注入攻击保持在最低程度。@FarligopTreden,使用参数化命令是否可以保护我免受SQL注入攻击?我不太明白,但下面是我的一些DAL:使用(SqlCommand comm=newsqlcommand(“插入教师(姓名、图片名称、博客、IsAdmin)值(@Name、@PictureFileName、@Blog、@IsAdmin);”,conn))它运行得很正常,插入了新项目,我也显示了它们..但是只有PictureFileName的默认属性会生成一个空字符串或其他东西!如果PictureFileName为空,不要将其添加到insert子句中。因此将插入默认值。因此,您建议使用与adt?相同的方法。使用两种不同的方法或查询o根据是否上传了文件执行?@IKashef-无论哪种方式,您都需要防止该列出现在插入的列列表中(正如我在上面用代码重写演示的那样),或者您需要文本单词
DEFAULT
出现在值列表中-无论哪种方式,您都必须编写代码来专门处理此插入,以便应用默认值。这只是一个想法-但对于ORM来说,没有什么问题是太小的。LINQ to SQL是现成的,需要几秒钟来设置。它手工编写ADO代码的时间比设置LINQ映射的时间要长。此外,小问题往往会随着时间的推移变成更大的问题,因此,按照您的意思开始。