我正在尝试用SQL CE学习C#,以便我的程序可以记住东西.
我创建了一个数据库,可以连接到它:
SqlCeConnection conn =
new SqlCeConnection(@"Data Source=|DataDirectory|\dbJournal.sdf");
conn.Open();
Run Code Online (Sandbox Code Playgroud)
并且它连接正确,我想因为如果我重命名dbJournal.sdf错误它不调试正确.
假设我想做一个简单的SELECT查询.
(SELECT * FROM tblJournal)
Run Code Online (Sandbox Code Playgroud)
怎么做的?
简单的插入怎么样?
(INSERT TO tblJournal (column1, column2, column2) VALUES
(value1, value2, value3))
Run Code Online (Sandbox Code Playgroud)
我习惯了PHP和MySQL(正如你可以看到的那样:o))
我正在构建一个通过Internet与WCF服务交互的客户端程序.一切都按预期工作,但我想知道如何保护我的服务,以便只有我的客户端程序才能使用它?
现在每个拥有我的服务的正确URL的人都可以将它与WCFTestClient(例如)一起使用.
什么是将其设为私有的最佳方式,以便只有我的客户才能使用该服务?旋转令牌字符串?证书?密码?
我不知道,也没有在互联网上找到任何有用的东西.
最好的祝福
更新:客户端程序旨在为公众(每个人)下载.因此,它不是供内部使用,它将是我们将提供的服务,正式生产的服务.
我自己的想法是:在我的客户端程序中绑定证书(如果可能的话甚至?).在运行WCF服务的IIS上,检查有效证书.那可能吗?还是更好的解决方案呢?
只是想知道一些这方面的做法;
我用本地数据库(SQL CE)(dB.sdf文件)制作了一个简单的可视化C#程序.
假设用户删除了dB.sdf文件,并尝试打开exe程序 - 没有任何反应(exe文件启动但又重新关闭).
这里的典型做法是什么?程序是不会启动还是让程序创建数据库文件(如果它不存在)?
如果是后者,它是如何完成的?
最好的祝福
在我的 C# WCF 服务中,我有一个SqlDataReader包含要返回给客户端的数据行。
如何返回中的所有内容SqlDataReader?
现在我有
if (sqlReader != null)
{
if (sqlReader.HasRows)
{
while (sqlReader.Read())
{
return sqlReader[0].ToString();
}
sqlConn.Close();
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
那只返回第一个结果。目前该类的返回类型是字符串。我在想像 array in array 这样的东西,但我不确定如何?
编辑:
感谢您的众多回复。我有兴趣返回服务“创建”的整个 SQL 数据。不在线第一列 ([0]) - 这仅用于测试。
但我不确定如何将服务中的所有内容返回给客户端。
例如。在 Powershell 中,如果我必须在客户端之间传递它,我会创建一个集合并将对象添加到该集合中。
我在 C# 和 WCF 中寻找类似的东西。
到目前为止非常感谢:)
编辑#2:
知道了!:)
创建了一个新类(例如):
public class ObjectNotification
{
public string AlertDescription;
public string Servername;
}
Run Code Online (Sandbox Code Playgroud)
在我的 svc.cs 文件中:
List<ObjectNotification> objlist = new List<ObjectNotification>();
Run Code Online (Sandbox Code Playgroud)
和
if (sqlReader.HasRows) …Run Code Online (Sandbox Code Playgroud) 我需要创建一个C#程序,它将在我们的几台本地Windows客户机上运行.这些"客户端"程序必须从另一台机器上运行的"管理"程序中获取命令.这些命令可能是重新启动客户端计算机,将一些有关IP地址的本地信息返回给"admin"程序.
但是如何实现这一目标呢?我对WCF了解一点,但这是正确的方法吗?如果我使用WCF,那么我将不得不让客户端程序像每一秒一样运行服务方法来检查新命令.使用套接字我建立一个"直接"连接,客户端只是等待接收命令 - 是不是正确的理解?
哪种方式对我来说是正确的方式?
我们正在谈论~10个客户端,我想要1秒钟的最大延迟(发送命令 - 接收信息).
任何提示也将不胜感激.
最好的祝福
我已经创建了我的数据库的ADO.NET模型.使用CRUD(实体框架并使用我创建的ADO.NET实体模型)创建了一个新控制器.
在我的数据库中,我有一个简单的Users表.表中的密码行将包含使用SimpleCrypto(PBKDF2)加密的用户密码.
在我的ADO.NET Users.cs模型中,我添加了以下验证:
[Required]
[DataType(DataType.Password)]
[StringLength(20, MinimumLength = 6)]
[Display(Name = "Password")]
public string Password { get; set; }
Run Code Online (Sandbox Code Playgroud)
这与浏览器中的jQuery一起使用验证.但是在我的控制器中我正在加密密码,然后密码字符串将在长度上超过20个字符.
var crypto = new SimpleCrypto.PBKDF2();
var encryptedPass = crypto.Compute(user.Password);
user.Password = encryptedPass;
user.PasswordSalt = crypto.Salt;
_db.Users.Add(user);
_db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这给了我和"一个或多个实体的验证失败." - 错误.
我可以将用户复制到"var newUser",然后在那里设置所有属性,但是在这种情况下是否有更简单的方法绕过模型验证?
编辑:如果我删除模型中密码道具的验证,那么一切正常.因此,它是给我的错误,因为我改变从6-20个字符长度的密码,因为在控制器中的加密+100 lengt字符验证.
编辑:插入此问题的完整控制器部分.
[HttpPost]
public ActionResult Create(Users user)
{
if (!ModelState.IsValid)
{
return View();
}
if (_db.Users.FirstOrDefault(u => u.Email == user.Email) != null)
{
ModelState.AddModelError("", "User already exists in database!");
return View();
}
var crypto = new …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么这个简单的更新命令不起作用:
private void button1_Click(object sender, EventArgs e)
{
SqlCeCommand cmd = new SqlCeCommand("UPDATE tbl_Settings set password = '1234')", conn);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
There was an error parsing the query. [ Token line number = 1,Token line offset = 42,Token in error = ) ]
.
我的select和insert命令完美无缺:
SqlCeCommand cmd = new SqlCeCommand("SELECT password FROM tbl_Settings", conn);
string password = cmd.ExecuteScalar().ToString();
Run Code Online (Sandbox Code Playgroud)