我有一个简单的问题,即读取Excel文件(使用互操作)并使用从中提取的一些数据填充MSSQL数据库文件.到目前为止这很好.我有一个Shops表,其中包含以下字段:
我阅读了excel文件,然后创建了一个新的Shops对象并设置了Name,Settlement,County和Address属性,并使用新的Shops对象调用Shops.InsertOnSubmit().
在此之后我必须重置数据库(至少是表),我发现最简单的方法是调用DeleteDatabase()方法,然后再次调用CreateDatabase().问题是,在第一次重置后,当我再次尝试填充表时,我得到异常:数据库生成了一个已经在使用的密钥.
另外,从那时起,我无法使用该数据库文件,因为DatabaseExists()返回FALSE,但是当我调用CreateDatabase()方法时,它抛出一个异常,数据库已经存在(尽管数据文件没有不存在).
我究竟做错了什么?非常感谢你提前!
我有:
它们都有自己的CMakeLists.txt,可以独立配置和构建。
但是,我无法使CMakeLists.txt可执行文件(Z)正常工作。
我的方法是这样的:
foreach(clib ${OWN_LIBS})
set(LIBS "${LIBS} ${clib}")
set(CLIB_DIR "${PROJECT_SOURCE_DIR}/../lib${clib}")
set(CLIB_BUILD_DIR "${CLIB_DIR}/build")
add_subdirectory("${CLIB_DIR}" "${CLIB_BUILD_DIR}")
include_directories("${CLIB_DIR}/incl")
link_directories("${CLIB_BUILD_DIR}")
endforeach(clib)
Run Code Online (Sandbox Code Playgroud)
OWN_LIBS在项目Y中只是“ X”,而在项目Z中是“ X Y”。
这适用于项目Y,但在项目Z中,我得到:
...(add_subdirectory)处的CMake错误:二进制目录
Run Code Online (Sandbox Code Playgroud).../libX/build已经用于构建源目录。它不能用于构建源目录
Run Code Online (Sandbox Code Playgroud).../libX指定唯一的二进制目录名称。
我还尝试尝试创建本地构建目录,例如,将存在libY / build / deps-libX /,其中包含已配置和构建的库X(从Y使用时),而Z具有X和Y的库。 ,接下来我遇到了:
add_library无法创建目标“ X”,因为已经存在另一个具有相同名称的目标。现有目标是在源目录“ libX”中创建的共享库。有关更多详细信息,请参阅策略CMP0002的文档。
不能使用ExternalProject。
我正在使用System.Net.HttpWebRequest类来实现一个简单的HTTP下载器,它可以在被取消后暂停,取消甚至恢复(使用HTTP Range请求头).
很明显,HttpWebRequest.GetResponse()是HTTP请求实际发送到服务器的时候,并且该方法在收到HTTP响应(或发生超时)时返回.但是,响应主体用Stream表示,这让我想知道响应主体是否实际上与响应头一起传输(即,当GetResponse()返回时它已经下载),或者只是按需下载,当我尝试时从响应流中读取?或者当我调用HttpWebResponse.GetResponseStream()方法时?
不幸的是,msdn文档没有说明,我对HTTP协议的了解还不够.
在这种情况下,如何进行分块传输等(也就是说,我应该如何在C#应用程序中处理它们)?什么时候实际上是从服务器下载的响应数据?
在这种特殊情况下,我正在编写TCP/IP服务器,而我正在使用TcpListener.BeginAcceptTcpClient()来接受传入连接.服务器逻辑在实现IDisposable接口的单个类中实现:当调用Dispose()时,我想取消BeginAcceptTcpClient()操作.
现在用更一般的术语来说:当使用.NET 的异步I/O模型(Begin*和End*)时,如何取消操作?
我的想法是这样的:
private volatile bool canceledFlag = false;
this.listener.BeginAcceptTcpClient(asyncResult =>
{
if(this.canceledFlag) return;
// ...
}, null);
Run Code Online (Sandbox Code Playgroud)
Dispose()会将标志设置为true,并且还会调用this.listener.Stop().但是我记得已经读过,对于每个Begin*调用必须有匹配的End*调用或者会发生不好的事情.
那我该怎么做呢?请注意,我正在寻找一个使用Begin*和End*方法取消的一般解决方案 - 我只是给了你具体的使用场景,以帮助你理解我的问题.
我正在尝试使用Qt的信号和插槽机制和自定义枚举类型.
我已经阅读了以下所有内容,但没有一个有用:
DetectorEngineThread.h:
class DetectorEngineThread : public QThread
{
Q_OBJECT
Q_ENUMS(ErrorCode)
Q_ENUMS(Status)
public:
enum ErrorCode
{
...
};
enum Status
{
...
};
...
signals:
void statusChanged(Status newStatus);
void processingError(ErrorCode code);
};
Q_DECLARE_METATYPE(DetectorEngineThread::ErrorCode)
Q_DECLARE_METATYPE(DetectorEngineThread::Status)
Run Code Online (Sandbox Code Playgroud)
MainWindow.h:
...
#include "DetectorEngineThread.h"
...
class MainWindow : public QMainWindow
{
Q_OBJECT
...
private:
DetectorEngineThread* m_detEng;
...
private slots:
void on_detEng_statusChanged(DetectorEngineThread::Status newStatus);
void on_detEng_processingError(DetectorEngineThread::ErrorCode errorCode);
...
};
Run Code Online (Sandbox Code Playgroud)
MainWindow.cpp:
...
#include "MainWindow.h"
...
MainWindow::MainWindow(...) : ...
{
...
qRegisterMetaType<DetectorEngineThread::Status>("DetectorEngineThread::Status");
qRegisterMetaType<DetectorEngineThread::ErrorCode>("DetectorEngineThread::ErrorCode");
...
m_detEng …Run Code Online (Sandbox Code Playgroud) 我正在使用SQL Server 2008.我应该能够"连接"到用户指定的数据库文件(mdf)(使用连接字符串的AttachDbFilename部分)并保存所选文件的副本.我还必须处理数据库的内容.
如果我做对了,一个mdf文件代表一个包含表,存储过程等的完整数据库.但是,如果我在不同文件夹中有两个同名文件(一个在SQL Server的DATA文件夹中,另一个在C :)的根,我尝试在C下加载文件:我收到一条错误,指出已存在具有该名称的数据库.
我在C:下重命名了该文件,但现在我收到一个错误:
"尝试打开或创建物理文件'C:/myDatabaseFile_log.ldf'时,CREATE FILE遇到操作系统错误5(无法检索此错误的文本.原因:15105).无法打开新数据库'C:/MYDATABASEFILE.MDF '.CREATE DATABASE被中止.尝试为文件'C:/myDatabaseFile.mdf'附加一个自动命名的数据库失败.存在一个同名的数据库或指定的文件无法打开,或者它位于UNC共享上."
请注意:我正在尝试打开数据库而不是尝试创建它.
那么我做错了什么?我误解了什么吗?这些数据库文件如何工作(我的意思是,如何使用它们)?
我有一个线程,它创建可变数量的工作线程并在它们之间分配任务.这是通过向线程传递一个TaskQueue对象来解决的,您将在下面看到它的实现.
这些工作线程只是迭代它们给出的TaskQueue对象,执行每个任务.
private class TaskQueue : IEnumerable<Task>
{
public int Count
{
get
{
lock(this.tasks)
{
return this.tasks.Count;
}
}
}
private readonly Queue<Task> tasks = new Queue<Task>();
private readonly AutoResetEvent taskWaitHandle = new AutoResetEvent(false);
private bool isFinishing = false;
private bool isFinished = false;
public void Enqueue(Task task)
{
Log.Trace("Entering Enqueue, lock...");
lock(this.tasks)
{
Log.Trace("Adding task, current count = {0}...", Count);
this.tasks.Enqueue(task);
if (Count == 1)
{
Log.Trace("Count = 1, so setting the wait handle..."); …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×3
sql-server ×2
asynchronous ×1
c++ ×1
cmake ×1
http ×1
io ×1
linq-to-sql ×1
qt ×1