浏览完本文后:http: //diovo.com/2008/08/are-foreign-keys-really-necessary-in-a-database-design/
在设计数据库时使用外键似乎是个好主意.但是你什么时候用得太多了?
例如,假设我有一个主表用于存储其他程序通过以下列引用的机器部件信息列表:
我是否应该制作包含所有可能颜色,单位和类别列表的表格,然后将这些表格设置为机器零件信息表中相应列的外键?在什么时候使用外键的好处会影响我正在制作所有这些额外的表和关系的事实?
在ASP.NET方面,我是一个完全的初学者,但我想学习它,以便构建一个最终将与云托管SQL服务器通信的Web应用程序.但是,我找不到任何概述ASP.NET Web应用程序和ASP.NET MVC2 Web应用程序之间差异的信息(在visual studio 2010中),所以我不知道从哪里开始.任何人都可以给我一个简单的解释/大纲,以便我可以决定要遵循的教程吗?
谢谢
假设我在Visual Studio Database1.mdf的App_Data文件夹中创建了一个名为SQL Server的数据库Names.
如何使用C#建立连接以读取表值?
到目前为止,我尝试过这样的事情:
SqlConnection conn = new SqlConnection("Server=localhost;Database=Database1;");
conn.Open();
// create a SqlCommand object for this connection
SqlCommand command = conn.CreateCommand();
command.CommandText = "Select * from Names";
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
未找到数据库/错误连接到数据库
以下代码是我用来从sql数据库中检索用户信息的代码.
string userName = LoginUser.UserName;
string password = LoginUser.Password;
string comm = "SELECT Username,Password,Clientname,Role FROM Users WHERE Username = '" + userName + "';";
bool rememberUserName = LoginUser.RememberMeSet;
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
SqlCommand command = new SqlCommand(comm, conn);
SqlDataAdapter da = new SqlDataAdapter(command);
DataTable dt = new DataTable();
da.Fill(dt);
DataRow dr = dt.NewRow();
if (dt != null)
{
//logic
}
Run Code Online (Sandbox Code Playgroud)
但是,如果数据库中没有用户名等于LoginUser.Username的条目,则(dt!= null)不返回false.是否有不同的方法来检查sqlcommand是否成功?
这是我第一次构建一个Web应用程序,仅用于处理用户上传的文件,我有一些关于如何正常完成的问题:
是否有任何安全问题需要考虑?要处理的文件本质上是我的应用程序将逐行读取的文本文件.我应该限制文件上传扩展名和/或是否还有其他预防措施?
上传文件的最佳组织方法是什么?这些文件不需要永久存储在我的应用程序中,所以我应该将它们转储到一般的"数据"文件夹中并删除不再需要的内容吗?
构建具有我错过的类似功能的Web应用程序还有其他重要方面吗?
谢谢
假设我有以下课程:
public class Test{
public string Length { get; set; }
public string Width { get; set; }
public string Height { get; set; }
public int Count { get; set; }
public string Label { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想找到具有相同长度和标签值的项目,并计算每个项目的数量.到目前为止我的代码看起来像:
var dups = testlist.GroupBy(i => new { i.Length, i.Label })
.Where(g => g.Count() >= 1)
.Select(g => new { Length = g.Key.Length, Label = g.Key.Label,
Count = g.Count() });
Run Code Online (Sandbox Code Playgroud)
但问题是,var中的对象不再具有width或height属性(它们不存在于g.Key中).无论如何,在结果中保存其他属性的同时,根据两个属性找到重复项?
是否可以将表的外键作为另一个表的复合主键的一部分?例如,如果我有两个表,一个包含有关不同用户的所有活动项目的信息,另一个包含有关项目正在使用的设备的信息:
项目表:
Composite Primary Keys: UserId, ProjectId (两者都不是独一无二的)
设备表:
Composite Primary Keys: UserId, ProjectId, EquipmentId (两者都不是独一无二的)
现在是否可以将设备表中的ProjectId设置为项目表中的外键?当我尝试时,我得到一个错误,说项目表中的列与现有的主键或唯一约束不匹配?
我正在使用 for 循环来创建多个线程并将索引 i 作为参数传递,如下所示:
pthread_t p[count];
for (int i = 0; i < count; i++){
pthread_create(&p[i], NULL, &somefunc, (void*)&i);
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试检索 i 的值:
void *somefunc (void* ptr){
int id = *(int*)ptr;
}
Run Code Online (Sandbox Code Playgroud)
但是,我注意到有时,线程中的 id 会有重叠的值,我怀疑这是由于在线程能够检索值之前 for 循环更新的索引(因为我传入了指针,而不是值本身)。有没有人有任何建议可以在不减慢 for 循环的情况下克服这个问题?
谢谢
我一直在努力学习如何在C#中使用事件处理程序,但我无法弄清楚以下代码中的处理程序(this,e):
public event EventHandler ThresholdReached;
protected virtual void OnThresholdReached(EventArgs e)
{
EventHandler handler = ThresholdReached;
if (handler != null)
{
handler(this, e);
}
}
Run Code Online (Sandbox Code Playgroud)
它是否尝试使用事件(e)调用事件处理程序方法(this)?
c# ×5
sql ×3
asp.net ×2
foreign-keys ×2
sql-server ×2
asp.net-mvc ×1
c ×1
database ×1
duplicates ×1
events ×1
file-upload ×1
git ×1
linq ×1
list ×1
primary-key ×1
pthreads ×1